3

Мое приложение запускает службу, которая прекращается, когда устройство перезагружается или приложение переустанавливается (обновляется). Я добавил два широковещательных приемника, чтобы поймать эти события - BOOT_COMPLETED и ACTION_MY_PACKAGE_REPLACED.Android: широковещательная передача ACTION_MY_PACKAGE_REPLACED никогда не была получена

Приемник ACTION_MY_PACKAGE_REPLACED, похоже, не работает. Вот что у меня есть:

AndroidManifest.xml:

<receiver android:name=".RebootReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver> 
    <receiver android:name=".ReInstallReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.ACTION_MY_PACKAGE_REPLACED"/> 
     </intent-filter> 
    </receiver> 

RebootReceiver:

public class RebootReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Logg.d("Reboot completed. Restarting service"); 
     context.startService(new Intent(context, MyService.class)); 
    } 
} 

ReInstallReceiver:

public class ReInstallReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Logg.d("App Upgraded or Reinstalled. Restarting service"); 
     context.startService(new Intent(context, MyService.class)); 
    } 
} 

Запуск minSdk = 16; Тестирование на Galaxy S3 под управлением KitKat. Проверка успешности, проверяя, работает ли моя служба в настройках/приложениях, что она делает при перезагрузке, но не переустанавливает.

Я принял во внимание примечания следующего содержания, в которых говорится, что в Android Studio 1.0+ манифестные слияния означают, что я не могу объединить два приемника в один класс. См ACTION_MY_PACKAGE_REPLACED not received и Android manifest merger fails for receivers with same name but different content

ответ

12

вероятно Вы поняли это уже, но ваше имя действия в манифесте не так, вместо того, чтобы:

android.intent.action.ACTION_MY_PACKAGE_REPLACED 

должно быть

android.intent.action.MY_PACKAGE_REPLACED 

Вы можете также вызвать вручную приемник с использованием adb shell для целей тестирования:

adb shell am broadcast -a android.intent.action.MY_PACKAGE_REPLACED -n com.example.myapp/.ReInstallReceiver 
+2

не может эмулировать это намерение с помощью команды adb на Android 7 Nougat, кажется, что теперь он находится в списке чувствительных намерений: «java.lang.SecurityException: Permission Denial: не разрешено отправлять br oadcast android.intent.action.MY_PACKAGE_REPLACED ". Отлично работает на Kit-Kat 4.4, хотя даже без команды adb он вызывает мою точку останова в приемнике каждый раз, когда я запускаю приложение в Android Studio –

1

ACTION EXPLAIN IMAGE

Примите во внимание, что:

  1. Новая версия приложения
  2. Вы должны запустить ADB установить -r новую версию APK, если вы просто запустите в Android Studio он выиграл» t получить эту трансляцию
Смежные вопросы