2016-01-13 3 views
0

Я хочу запустить активность 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 идеи ??

ответ

0

Вы можете использовать IntentFilter instace из BootComplate в manifist так:

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

Спасибо за ваш answer.unfortunately, это не сделать трюк, есть еще некоторая задержка после загрузки, и пользователь должен блокировать и разблокировать телефон 2-3 раза перед появляется моя пользовательская активность экрана блокировки. –

0

Я была такая же проблема. Он был исправлен путем включения

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

на приемнике. Небольшая задержка в 6 секунд при перезагрузке, которую я пытаюсь сузить.

Я надеюсь, что это работает для вас

+1

Благодарим за помощь! , Это тот же случай со мной, теперь у меня средняя задержка в несколько секунд, как вы упомянули. Я также использую этот тег xml. Я пытаюсь получить лучший результат, найдя где-нибудь какие-то учебники. Я чувствую, что в этой теме нет большого количества документов. Если вы найдете хороший, просите его мне. –