我希望在设备重新启动后与启动通知(如消息,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广播时,它会非常慢,直到设备完全启动并工作为止。因此,在锁屏工作之前,您可以多次锁定和解锁手机。任何想法??
答案 0 :(得分:0)
你可以在这样的表现形式中使用 bootComplate 的 intentFilter 实例:
<action android:name="android.intent.action.USER_PRESENT" />
答案 1 :(得分:0)
我有同样的问题。它通过包括
来解决<category android:name="android.intent.category.DEFAULT" />
在接收器上。重新启动时稍微延迟了6秒,我试图缩小范围。
我希望这对你有用