首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >照相机和KeyGuard

照相机和KeyGuard
EN

Stack Overflow用户
提问于 2013-11-20 16:11:04
回答 1查看 518关注 0票数 0

从一个服务,我发起了一个活动,这个活动拍了一张照片,然后结束,

我的问题是:

当屏幕关闭&服务启动此活动时,该活动根本不拍照,摄像机看起来没有初始化,这是我使用的代码:

代码语言:javascript
复制
  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);      
        setContentView(R.layout.main);


    ////Using those Flags to turn the Screen On & Dismiss the Keyguard & it Turn the Screen On with Success
         this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
         this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
         this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);


      ////Tried Sleep Method after Turning the Screen On with no Luck
           try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Toast.makeText(this, "onCreate", Toast.LENGTH_SHORT).show();

        if(camera != null){
               camera.release();
               camera = null;
               }

 ///Camera Initialization & Take Picture but Nothing Happen if this Activity was Started when Screen was Off...

 }


        public void onPause(){
        super.onPause();
        Log.e("TAG", "onPause");
        if(camera != null){
           camera.release();
           camera = null;
           }

       }


         @Override
    public void onResume(){
        Toast.makeText(this, "On Resume", Toast.LENGTH_SHORT).show();
    }


        public void onDestroy(){

           super.onDestroy();
           if(camera != null){ surfaceHolder.removeCallback(this);
           camera = null;}

       }


    public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "surfaceCreated", Toast.LENGTH_SHORT).show();
        this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
        this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

   ///Camera Initialization...

  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-23 11:18:54

找到解决办法,回答:

代码语言:javascript
复制
 PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);

        boolean isScreenOn = pm.isScreenOn();


        try
        {
            // give 500ms for device to wake up
            Thread.sleep(500);
        }
        catch (InterruptedException e)
        {
        }

       /////Build.VERSION.SDK_INT >= 11 because this.recreate() Method is only Avaible since Android 3.0
        if(!isScreenOn && Build.VERSION.SDK_INT >= 11){

        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE | PowerManager.ACQUIRE_CAUSES_WAKEUP, "AQUIRED");
        wl.acquire();

        this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
        this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

        try
        {
            // give 500ms for device to wake up
            Thread.sleep(600);
        }
        catch (InterruptedException e)
        {
        }



       ////Important, if Screen was Off/KeyGuard Active, we ReCreate the Activity
        this.recreate();



        }


        if(camera != null){
               camera.release();
               camera = null;
               }

  ////Camera Initialization...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20101010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档