2016-07-21 5 views
1

기기를 부팅 할 때 BOOT_COMPLETED 브로드 캐스트를 수신해야하는 앱을 만들고 있습니다. 안드로이드 개발자의 문서에 따르면, 나는 이미 안드로이드 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

:

여기에 코드입니다. 이 카테고리의 문서에 따르면, 다음과 같은 목적을 위해 사용되는 다음 활동 데이터의 조각에 수행 할 기본 동작 (센터 프레스)에 대한 옵션을해야

설정합니다. 이것을 설정하면 일부 데이터에 대해 작업을 수행 할 때 사용자가 설정하지 않은 활동이 숨겨집니다. 이것은 일반적으로 액션을 시작할 때 인 텐트에 설정되지 않습니다. 이는 패키지에 지정된 인 텐트 필터에 사용하기위한 것입니다. (강조 광산)

범주의 목록과 그들이 여기에 대한있어 참조 : https://developer.android.com/reference/android/content/Intent.html

+0

여전히 작동하지 않습니다. – Guomato

+0

"작동하지 않습니다"라는 말은 전혀 호출되지 않거나 호출되지 않고 예상 한대로 작동하지 않습니다. – EJoshuaS

+0

장치 부팅 후 수신기가 호출되지 않습니다. – Guomato