2015-06-09 5 views
2

Итак, я работаю над тем, что требует от меня знать, когда обновляется другое приложение на устройстве. Поэтому мой вопрос довольно прост, не позволяет сказать, что YouTube или Spotify отправляют широковещательную рассылку, когда приложение обновляется, и если да, то что мне нужно поймать с помощью моего широковещательного видео.Обновление обновления приложения для Android

ответ

7

Вашего намерения фильтра должно быть как:

<intent-filter> 
    <action android:name="android.intent.action.PACKAGE_REPLACED" /> 
    <data android:scheme="package" /> 
</intent-filter> 

И OnReceive метод из вашего BroadcastReceiver должны быть:

@Override 
public void onReceive(Context context, Intent intent) { 
    Uri data = intent.getData(); 
    if (data.toString().equals("package:" + "com.target.package") { 
     // action to do 
    } 
} 
3

ACTION_PACKAGE_REPLACED это действие срабатывает, когда приложение обновляется Согласно документации:

новая версия пакета приложений было установлено, заменив существующую версию, которая ранее была установлена. Данные содержат название пакета.

intent.getPackage() возвращает пакет/приложение, предназначенное специально для этого адресата, но оно было отправлено любому заинтересованному получателю, поэтому такого пакета нет.

Использование intent.getData() который возвращает обновленный пакет как Ури

+1

это будет работать для вашего собственного приложения? будет ли приемник вещания выполняться, если ваше приложение обновлено? –

0

Согласно андроидным документам: Broad cast Действие: новая версия вашего приложения была установлена ​​поверх существующей. Это отправляется только в приложение, которое было заменено. Он не содержит никаких дополнительных данных; Чтобы получить его, просто используйте фильтр намерений для этого действия.

<intent-filter> 
    <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> 
    <data android:scheme="package" /> 
</intent-filter> 

И OnReceive метод из вашего BroadcastReceiver должен быть:

@Override 
public void onReceive(Context context, Intent intent) { 
    // action to do 

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