2016-01-13 187 views
0

我想在啓動通知(如Messages,Viber通知,WhatsApp等)並行重啓後啓動鎖屏活動如何做???我製作了一個廣播接收器,它接收BOOT_COMPLETED動作並開始啓動與Intent.ACTION_SCREEN_OFF和Intent.ACTION_SCREEN_ON意圖過濾器和接收器再次註冊同一接收器服務啓動鎖屏activity.Here是我的代碼:如何在重新啓動後立即啓動鎖屏活動?

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"); 
} 
} 

這種做法是working.However,這是非常緩慢因爲廣播接收機收聽BOOT_COMPLETED廣播,等待設備完全啓動並工作。因此,您可以鎖定和解開在鎖屏工作之前多次給手機打電話。任何想法?

回答

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標籤。我試圖通過在某處尋找一些教程來獲得更好的結果。我覺得沒有太多關於這個話題的文件。如果你找到一個好的,請將它轉發給我。 –

相關問題