2015-07-29 3 views
1

Я не получаю трансляцию BOOT_COMPLETED, когда я тестирую свой телефон HUAWEI p6. Широковещательный принимается только один раз после установкиAndroid BOOT_COMPLETED Неисправность вещания

Вот AndroidManifest

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
<uses-permission android:name="android.permission.WAKE_LOCK"/> 
.... 
<receiver android:name=".receiver.WakefulBootReceiver" 
     android:enabled="true" 
     android:exported="false"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
      <action android:name="android.intent.action.QUICKBOOT_POWERON"/> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 

    <receiver android:name=".receiver.AlarmNotificationReceiver"> 
    </receiver> 

    <receiver android:name=".receiver.MyWakefulReceiver"> 
    </receiver> 

BootReceiver:

public class WakefulBootReceiver extends WakefulBroadcastReceiver { 
public static String CALLER_ID = "WakefulBootReceiver"; 

@Override 
public void onReceive(Context context, Intent intent) { 
    Alog.debug("WakefulBootReceiver Before IntentService"); 
    Intent service = new Intent(context, AlarmSetService.class); 
    service.putExtra("SERVICE_CALLER", CALLER_ID); 
    startWakefulService(context, service); 
} 
} 

И IntentService:

@Override 
protected void onHandleIntent(Intent intent) { 
    Alog.debug("AlarmSetService/onHandleIntent"); 
    Bundle extras = intent.getExtras(); 
    String caller = ""; 
    if (extras != null) { 
     caller = extras.getString("SERVICE_CALLER"); 
    } 

    checkForTodayAlarms(); 

    if (caller.equals("MyWakefulReceiver")) { 
     Alog.debug("AlarmSetService/caller MyWakefulReceiver"); 
     MyWakefulReceiver.completeWakefulIntent(intent); 
    } else { 
     Alog.debug("AlarmSetService/caller WakefulBootReceiver"); 
     WakefulBootReceiver.completeWakefulIntent(intent); 
    } 

Он работает на эмуляторе. И работает по телефону, когда я посылаю трансляцию с:

./adb оболочки

утра широковещательный -a android.intent.action.BOOT_COMPLETED

Я открыл приложение несколько раз перед перезагрузкой. Установлен на устройстве.

Любая помощь будет оценена

Благодаря

+0

Попробуйте удалить '<категория андроид: имя = "android.intent.category.DEFAULT"/>' от намерения фильтра – Karakuri

+0

Иметь такое же поведение. Обновлено описание –

+0

Добавление разрешения WAKE_LOCK ** и ** удаление упомянутой строки кода @Karakuri, часть загрузочного кода вашего кода работает на моем Nexus 5. – blackcj

ответ

0

Согласно documentation, WakefulBroadcastReceiver требует разрешения WAKE_LOCK. Для того, что вы делаете, должно быть достаточно регулярного BroadcastReceiver. Что-то вроде этого:

public class WakefulBootReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Make sure we are getting the right intent 
     if("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { 
      // Your code here 
     } else { 
      Log.e(TAG, "Received unexpected intent " + intent.toString()); 
     } 
    } 
} 
+0

Привет blackcj. Я думаю, согласно документации и обучению [учебник] (https://developer.android.com/training/scheduling/wakelock.html#wakeful). Если я использую IntentService для трансляции, вам необходимо использовать «WakefulBroadcastReceiver» для обеспечения фонового процесса –

Смежные вопросы