如何在重启后立即启动锁屏活动?

时间:2016-01-13 10:46:40

标签: android-activity service broadcastreceiver lockscreen

我希望在设备重新启动后与启动通知(如消息,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广播时,它会非常慢,直到设备完全启动并工作为止。因此,在锁屏工作之前,您可以多次锁定和解锁手机。任何想法??

2 个答案:

答案 0 :(得分:0)

你可以在这样的表现形式中使用 bootComplate intentFilter 实例:

<action android:name="android.intent.action.USER_PRESENT" />

答案 1 :(得分:0)

我有同样的问题。它通过包括

来解决
<category android:name="android.intent.category.DEFAULT" />

在接收器上。重新启动时稍微延迟了6秒,我试图缩小范围。

我希望这对你有用

相关问题