【发布时间】:2016-01-13 10:46:39
【问题描述】:
我想在设备重新启动后与启动通知(如消息、Viber 通知、Whatsapp 等)并排启动锁屏活动。如何做到这一点??我制作了一个接收 BOOT_COMPLETED 操作的广播接收器,然后它启动一个服务,该服务再次使用 Intent.ACTION_SCREEN_OFF 和 Intent.ACTION_SCREEN_ON 意图过滤器注册相同的接收器,并且该接收器启动锁屏活动。这是我的代码:
AndroidManifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" ></uses-permission>
<receiver>
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
当然,我在清单中声明了服务。
这是我的广播接收器类
public class LockScreenBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("BroadCastReceiver", "ReceivedIntent");
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
Intent myIntent = new Intent(context, LockScreenActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
myIntent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
if (!LockScreenActivity.isActivityRunning) {
context.startActivity(myIntent);
}else{
Log.d("BroadCasrReceiver","LockScreenActivity is running");
}
}else if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Log.v("LockScreenBroadReceiver","boot completed");
Intent startServiceIntent = new Intent(context,LockScreenService.class);
context.startService(startServiceIntent);
}
}
}
和服务等级:
公共类 LockScreenService 扩展服务 {
LockScreenBroadCastReceiver broadCastReciever;
public static boolean isRunning;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
isRunning = true;
registerReceiver();
}
@Override
public void onDestroy() {
super.onDestroy();
isRunning = false;
unregisterReceiver(broadCastReciever);
Log.d("LockScreenReceiver", "ReceiverUnregistered");
sendBroadcast(new Intent("RestartLockScreenService"));
}
private void registerReceiver(){
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
broadCastReciever = new LockScreenBroadCastReceiver();
registerReceiver(broadCastReciever,intentFilter);
Log.d("LockScreenReceiver", "ReceiverRegistered");
}
}
这种方法是有效的。但是,它非常慢,因为广播接收器会监听 BOOT_COMPLETED 广播,该广播会等待设备完全启动并工作。因此,您可以在锁屏工作之前多次锁定和解锁手机。有什么想法吗??
【问题讨论】:
标签: android-activity service broadcastreceiver lockscreen