2017-01-31 7 views
2

Это довольно распространенный вопрос, но я схожу с ума. Я думаю, что я тщательно разбираюсь с требованиями. Я хочу, чтобы BroadcastReceiver сделал что-то, когда телефон перезапустится.Проблемы с перезагрузкой Boot/Broadcast

Мой BroadcastReceiver (для загрузки):

public class BootReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Log.d("BootupReceiver", "Refreshing alarms."); 
    } 
} 

В 'манифеста' теге моего манифеста,:

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

В теге 'приложения' моего манифеста,:

<receiver 
    android:name=".receivers.BootReceiver" 
    android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED"/> 
    </intent-filter> 
</receiver> 

После развертывание приложения, я закрываю его, а затем перезапускаю его вручную. Я не думаю, что остановлено состояние.

Кроме того

Я пробовал различные комбинации этого уродства:

<receiver 
     android:name=".receivers.BootReceiver" 
     android:permission="android.permission.RECEIVE_BOOT_COMPLETED" 
     android:enabled="true" 
     android:exported="true"> 
     <intent-filter android:priority="999"> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
      <action android:name="android.intent.action.REBOOT"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.HOME" /> 
     </intent-filter> 
</receiver> 

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

Я также создал простое автономное приложение с ничего, кроме MainActivity и выше BroadcastReceiver, который работает (беспричинно).

Я проверил это на более Moto G и Samsung Galaxy Краю 7.

Есть ли известный случай, когда BootReceiver не заводится? Любое отклонение от того, что пойдет не так для моего кода?

Я нашел аналогичный вопрос, который пошел unanswered.

EDIT

я дополнительно попытался с помощью объявления оболочки вручную огонь REBOOT намерения. Все еще нет успеха.

EDIT 2

В соответствии с просьбой полностью манифеста. Если вы видите ОТКЛЮЧЕН, я просто удалю что-то потенциально конфиденциальное.

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

<uses-permission android:name="android.permission.WAKE_LOCK"/> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

<application 
    android:name=".REDACTEDApplication" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:largeHeap="true" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

    <activity 
     android:name=".ui.activities.SplashActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".ui.activities.InitialActivity" 
     android:screenOrientation="portrait"/> 
    <activity 
     android:name=".ui.activities.LoginActivity" 
     android:screenOrientation="portrait"/> 
    <activity 
     android:name=".ui.activities.CreateAccountActivity" 
     android:screenOrientation="portrait"/> 
    <activity 
     android:name=".ui.activities.MainActivity" 
     android:screenOrientation="portrait" 
     android:theme="@style/AppTheme.NoActionBar"> 
    </activity> 
    <activity 
     android:name=".ui.activities.VideoPlayerActivity" 
     android:screenOrientation="landscape"/> 
    <activity 
     android:name=".ui.activities.DisclaimerActivity" 
     android:screenOrientation="portrait"/> 
    <activity 
     android:name=".ui.activities.EPWebViewActivity" 
     android:screenOrientation="portrait"/> 
    <activity 
     android:name=".ui.activities.EscapePlanActivity" 
     android:screenOrientation="portrait"/> 
    <activity 
     android:name=".ui.activities.EscapeInfoActivity" 
     android:screenOrientation="portrait"/> 
    <activity 
     android:name=".ui.activities.EscapeSessionActivity" 
     android:screenOrientation="portrait"/> 
    <activity 
     android:name=".ui.activities.EscapeDetailActivity" 
     android:screenOrientation="portrait"/> 

    <meta-data 
     android:name="io.fabric.ApiKey" 
     android:value="REDACTED"/> 

    <activity 
     android:name=".ui.activities.RemindersActivity" 
     android:screenOrientation="portrait"> 
    </activity> 

    <receiver android:name=".receivers.NotificationsReceiver"/> 

    <receiver 
     android:name=".receivers.BootReceiver" 
     android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver> 

</application> 

EDIT 3

Я попытался добавить еще один приемник, но есть Android-студия генерации. Еще не повезло.

Использована оболочка АБР для запуска BOOT_COMPLETED в приложении. Никаких успехов.

+1

, пожалуйста, убедитесь, что вы импортировали все классы, а в манифестном пути записи напишите: –

+1

опубликуйте весь манифест. –

+0

@Rod_Algonquin Добавлено. – Cian

ответ

0

После очистки, восстановления и регенерации APK, он теперь работает. Я не уверен, что Studio кэшировала старый APK, или если я неправильно понял/испортил регулярную сборку, но приемник теперь работает.