2016-07-21 46 views
1

我正在開發一款應用程序,需要在設備啓動時接收BOOT_COMPLETED廣播。 根據Android開發人員的文檔,我已經知道,自從android 3.1以後,在用戶安裝或強制終止後永遠不會運行的應用程序將不會在設備引導時收到啓動廣播,因此通過規則,我怎樣才能接收啓動廣播?順便說一下,我已經嘗試在引導完成時打開我的應用程序,但它仍然無法正常工作。我的應用程序無法接收BOOT_COMPLETED廣播

下面的代碼:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.guoyonghui.todo" 
      android:installLocation="auto"> 

    <uses-permission android:name="android.permission.VIBRATE"/> 
    <uses-permission android:name="android.permission.WAKE_LOCK"/> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 

    <application 
     android:name=".BaseApplication" 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".tasks.TasksActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 

       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
     <activity android:name=".taskdetail.TaskDetailActivity"/> 
     <activity android:name=".addedittask.AddEditTaskActivity"/> 
     <activity android:name=".statistics.StatisticsActivity"/> 

     <receiver android:name=".alarm.AlarmReceiver"> 
      <intent-filter> 
       <action android:name="com.guoyonghui.todo.alarm.ACTION_TASK_ALARM"/> 
      </intent-filter> 
     </receiver> 
     <receiver 
      android:name=".alarm.BootReceiver" 
      android:enabled="true"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED"/> 
       <action android:name="android.intent.category.DEFAULT"/> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

public class BootReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 

     Toast.makeText(context, action, Toast.LENGTH_SHORT).show(); 
     Log.d("AlarmReceiver", action); 

     if (Intent.ACTION_BOOT_COMPLETED.equals(action)) { 
      TasksRepository tasksRepository = TasksRepository.getInstance(TasksLocalDataSource.getInstance(context)); 
      List<Task> tasks = tasksRepository.loadTasks(); 
      for (Task task : tasks) { 
       if (task.isActive()) { 
        AlarmReceiver.setAlarm(context, task); 
       } 
      } 
     } 
    } 
} 
+0

我有一個永遠無法接收BOOT_COMPLETED一個應用程序,但不同的是,我沒有'category.DEFAULT'行動在我的意圖過濾器中。也許你可以試試這個? – Marat

+0

@Guomato,你解決了這個問題嗎? –

回答

0

您不想使用默認類別在這種情況下。根據該類別的文檔,它是用於以下目的:如果

設置活性應爲默認的動作(中心按),以在數據塊上執行的選項。設置該選項可以隱藏用戶在對某些數據執行操作時沒有設置的任何活動。請注意,在啓動操作時,通常不會在Intent中設置此值 - 它用於包中指定的意向過濾器。 (重點煤礦)

查看類別列表,他們在這裏是什麼: https://developer.android.com/reference/android/content/Intent.html

+0

它仍然沒有工作 – Guomato

+0

「不工作」,因爲它根本不會被調用,或者它確實被調用,它不會達到您的期望值? – EJoshuaS

+0

接收器在設備引導後不會被調用 – Guomato

相關問題