【问题标题】:Android: Wake & unlock phoneAndroid:唤醒和解锁手机
【发布时间】:2011-11-10 00:27:48
【问题描述】:

我想弄清楚如何使用服务唤醒和解锁手机。我一直在参考this 帖子,但我不知道为什么它不起作用。这是我到目前为止的代码:

public class WakephoneActivity extends Activity {

    BroadcastReceiver mReceiver;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mReceiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                // Log.v(TAG, "Screen OFF onReceive()");
                screenOFFHandler.sendEmptyMessageDelayed(0, 2000);
            }
        };
    }

    private Handler screenOFFHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            // do something
            // wake up phone
            // Log.i(TAG, "ake up the phone and disable keyguard");
            PowerManager powerManager = (PowerManager) WakephoneActivity.this
                    .getSystemService(Context.POWER_SERVICE);
            long l = SystemClock.uptimeMillis();
            powerManager.userActivity(l, false);// false will bring the screen
            // back as bright as it was, true - will dim it
        }
    };

    protected void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
        registerReceiver(mReceiver, filter);
        // Log.i(TAG, "broadcast receiver registered!");
    }
}

我也在清单中添加了代码。有什么想法吗?

【问题讨论】:

  • 我认为您可以通过某种方式删除锁定设置,这样您就可以直接在您的活动中唤醒手机。

标签: android broadcastreceiver android-wake-lock


【解决方案1】:

在您的服务中使用以下代码。

PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
        mWakeLock = pm.newWakeLock((PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "YourServie");
        mWakeLock.acquire();
        [...]
        mWakeLock.release();

如果您还想解锁屏幕,请在您的服务中注册一个接收器,以监控屏幕是否打开/关闭,如果屏幕已关闭并且您想解锁手机,请使用此代码在onCreate:

Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
this.finish();
return;

我知道,这是一个相当肮脏的,但据我所知,没有其他解锁锁屏的方法(这只有在没有设置密码等情况下才有效,所以它必须是正常的“幻灯片解锁”屏幕)。

别忘了添加android.permission.WAKE_LOCK ;-)

/edit: 我刚刚看到你已经在使用一个 Activity。如果您有一个并且根本不需要该服务,只需将此代码放入活动中即可。

【讨论】:

    【解决方案2】:

    要使服务始终处于活动状态,您需要在清单上拥有此权限:

    <uses-permission android:name="android.permission.WAKE_LOCK" />
    

    您需要做的另一件事是购买 WakeLock。没有它,服务将结束一段时间。你可以这样做:

    getApplicationContext();
    PowerManager pm = (PowerManager)getApplicationContext().getSystemService(Context.POWER_SERVICE);
    WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
    wl.acquire();
    

    您可能需要将 PowerManager.PARTIAL_WAKE_LOCK 更改为您需要的那个。您可以查看有关该here 的信息。

    【讨论】:

      【解决方案3】:

      WakefulBroadcastReceiver 可以为您执行此操作。使用示例:

      import android.content.Context;
      import android.content.Intent;
      import android.os.SystemClock;
      import android.support.v4.content.WakefulBroadcastReceiver;
      import android.util.Log;
      
      public class SimpleWakefulReceiver extends WakefulBroadcastReceiver {
          @Override
          public void onReceive(Context context, Intent intent) {
              // This is the Intent to deliver to our service.
              Intent service = new Intent(context, SimpleWakefulService.class);
      
              // Start the service, keeping the device awake while it is launching.
              Log.i("SimpleWakefulReceiver", "Starting service @ " + SystemClock.elapsedRealtime());
              startWakefulService(context, service);
          }
      }
      

      在服务中完成动作后,调用SimpleWakefulReceiver.completeWakefulIntent(intent)释放唤醒锁。

      (因为@Force 已经给你提供了wakeLock 的详细信息,这里就不再赘述了 ;-)

      请注意,该类已从 api 级别 26.1.0 弃用,参考 here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-15
        • 1970-01-01
        • 1970-01-01
        • 2018-01-16
        • 1970-01-01
        • 1970-01-01
        • 2012-12-08
        • 2020-08-02
        相关资源
        最近更新 更多