Я хочу запустить активность lockscreen после перезагрузки устройства рядом с уведомлениями о запуске, такими как Сообщения, уведомления Viber, Whatsapp и т. Д. Как это сделать? Я сделал широковещательный приемник, который принимает действие BOOT_COMPLETED, и после этого он запускает сервис, который регистрирует тот же приемник снова Intent.ACTION_SCREEN_OFF и Intent.ACTION_SCREEN_ON намерения фильтра и что приемник начинает LockScreen activity.Here мой код:Как запустить активность lockscreen сразу после перезагрузки?
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>
и, конечно, я объявил служба в манифесте.
Вот мой класс Broadcast 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");
}
}
Этот подход working.However, это очень медленно поскольку широковещательный приемник прослушивает широковещательную рассылку BOOT_COMPLETED, которая ждет, пока устройство не будет полностью работать и работать. Таким образом, вы можете заблокировать и отключить ck телефон несколько раз, прежде чем вы получите lockscreen working.Any идеи ??
Спасибо за ваш answer.unfortunately, это не сделать трюк, есть еще некоторая задержка после загрузки, и пользователь должен блокировать и разблокировать телефон 2-3 раза перед появляется моя пользовательская активность экрана блокировки. –