本帖最后由 seLc7 于 2013-09-09 14:52:34 编辑

解决方案 »

  1.   

    FloatSurface extends Service 
    你这是service不是activity
    service没界面。创建一个activity吧,从service中启动,实现顶层窗口。
      

  2.   

    你是不是看的这个?http://blog.csdn.net/fly06102559/article/details/6996692
      

  3.   

    FloatSurface extends Service 
    你这是service不是activity
    service没界面。创建一个activity吧,从service中启动,实现顶层窗口。
    我知道的,所以我在service里调用悬浮窗,然后用悬浮窗加载控件
      

  4.   

    你是不是看的这个?http://blog.csdn.net/fly06102559/article/details/6996692
    又见凉凉哈,这个博文我也看了,基本的思想我就是模仿的他,但是就是报错不通过,不知道是哪里的问题。
      

  5.   

    你是不是看的这个?http://blog.csdn.net/fly06102559/article/details/6996692
    又见凉凉哈,这个博文我也看了,基本的思想我就是模仿的他,但是就是报错不通过,不知道是哪里的问题。
    你的41行和85行是什么?
    之前我也遇到过这个,后来发现是wmParams.flags 设的不对
      

  6.   

    你是不是看的这个?http://blog.csdn.net/fly06102559/article/details/6996692
    又见凉凉哈,这个博文我也看了,基本的思想我就是模仿的他,但是就是报错不通过,不知道是哪里的问题。
    你的41行和85行是什么?
    之前我也遇到过这个,后来发现是wmParams.flags 设的不对
    41行是onCreate()里的createFloatView();  
    85行是createFloatView();里的SurfaceHolder surfaceHolder=surfaceView.getHolder();
      

  7.   

    你是不是看的这个?http://blog.csdn.net/fly06102559/article/details/6996692
    又见凉凉哈,这个博文我也看了,基本的思想我就是模仿的他,但是就是报错不通过,不知道是哪里的问题。
    你的41行和85行是什么?
    之前我也遇到过这个,后来发现是wmParams.flags 设的不对
    41行是onCreate()里的createFloatView();  
    85行是createFloatView();里的SurfaceHolder surfaceHolder=surfaceView.getHolder();
    把createFloatView里面相关东西放到surfaceCreated回调去做呢
      

  8.   

    你是不是看的这个?http://blog.csdn.net/fly06102559/article/details/6996692
    又见凉凉哈,这个博文我也看了,基本的思想我就是模仿的他,但是就是报错不通过,不知道是哪里的问题。
    你的41行和85行是什么?
    之前我也遇到过这个,后来发现是wmParams.flags 设的不对
    41行是onCreate()里的createFloatView();  
    85行是createFloatView();里的SurfaceHolder surfaceHolder=surfaceView.getHolder();
    把createFloatView里面相关东西放到surfaceCreated回调去做呢不太明白呢,createFloatView里有windowManager的初始化还有setOnTouchListener()
      

  9.   

    你是不是看的这个?http://blog.csdn.net/fly06102559/article/details/6996692
    又见凉凉哈,这个博文我也看了,基本的思想我就是模仿的他,但是就是报错不通过,不知道是哪里的问题。
    你的41行和85行是什么?
    之前我也遇到过这个,后来发现是wmParams.flags 设的不对
    41行是onCreate()里的createFloatView();  
    85行是createFloatView();里的SurfaceHolder surfaceHolder=surfaceView.getHolder();
    把createFloatView里面相关东西放到surfaceCreated回调去做呢不太明白呢,createFloatView里有windowManager的初始化还有setOnTouchListener()
    我的意思是这个意思
    public void surfaceCreated(SurfaceHolder holder) {
    Log.i(TAG, "surfaceCreated" );
    mSurfaceHolder = holder; }
      

  10.   

    你是不是看的这个?http://blog.csdn.net/fly06102559/article/details/6996692
    又见凉凉哈,这个博文我也看了,基本的思想我就是模仿的他,但是就是报错不通过,不知道是哪里的问题。
    你的41行和85行是什么?
    之前我也遇到过这个,后来发现是wmParams.flags 设的不对
    41行是onCreate()里的createFloatView();  
    85行是createFloatView();里的SurfaceHolder surfaceHolder=surfaceView.getHolder();
    把createFloatView里面相关东西放到surfaceCreated回调去做呢不太明白呢,createFloatView里有windowManager的初始化还有setOnTouchListener()
    我的意思是这个意思
    public void surfaceCreated(SurfaceHolder holder) {
    Log.i(TAG, "surfaceCreated" );
    mSurfaceHolder = holder; }呃还是报错,看了下,基本的错误内容也一样。。
      

  11.   

    package com.spyvideo;import android.annotation.TargetApi;
    import android.content.Context;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.WindowManager;public class FloatSurface {
    private static WindowManager wm;
    private static WindowManager.LayoutParams params;
    private CameraPreview cameraPreview;
    private Context context;
    private SetCamera setCamera;

    //public static String ip = "192.168.0.58"; public FloatSurface(Context context) {
    super();
    this.context = context;
    setCamera=new SetCamera();
    } public void floatView() {
    wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    params = new WindowManager.LayoutParams();
    System.out.println("进入悬浮窗!!!!!!!!");
    /*
     * 如果设置为params.type = WindowManager.LayoutParams.TYPE_PHONE; 那么优先级会降低一些,
     * 即拉下通知栏不可见
     */
    params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
    //params.format = PixelFormat.RGBA_8888; // 设置图片格式,效果为背景透明 /*
     * 下面的flags属性的效果形同“锁定”。 悬浮窗不可触摸,不接受任何事件,同时不影响后面的事件响应。
     */
    params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
    | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
    | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
    // params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
    // | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; // 设置悬浮窗的长得宽
    params.width = 100;
    params.height = 100;
    cameraPreview = new CameraPreview(context);
    wm.addView(cameraPreview, params);
    } // 预览界面CameraPreview
    @TargetApi(9)
    class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { SurfaceHolder surfaceHolder; public CameraPreview(Context context) {
    super(context);
    System.out.println("进入CameraPreview!!!!!!!!");
    surfaceHolder = getHolder();
    surfaceHolder.addCallback(this);
    // mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); // 4.0+
    // auto
    } public void surfaceCreated(SurfaceHolder holder) {
    try {
    setCamera.setup(holder, SpyActivity.ip);
    System.out.println("setCamera is setuped");
    } catch (Exception e) {
    }
    setCamera.start();
    } public void surfaceDestroyed(SurfaceHolder holder) {
    setCamera.stop();
    } public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {

    }
    }
    }