Как заставить мое приложение получать трансляцию, когда другие приложения установлены или удалены

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

мой код

в манифесте:

<receiver android:name=".apps.AppListener">
    <intent-filter android:priority="100">
         <action android:name="android.intent.action.PACKAGE_INSTALL"/>
         <action android:name="android.intent.action.PACKAGE_ADDED"/>  
         <action android:name="android.intent.action.PACKAGE_REMOVED"/>
    </intent-filter>
</receiver>

в AppListener:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class AppListener extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent arg1) {
    // TODO Auto-generated method stub
    Log.v(TAG, "there is a broadcast");
    }
}

но я не могу принимать трансляции. Я думаю, что эта проблема связана с разрешениями приложений, любая идея?

Спасибо за помощь.

Ответы на вопрос(3)

Отличные ответы, осталось только одно:

При каждом обновлении приложения сначала вызывается ACTION_PACKAGE_REMOVED, а затем ACTION_PACKAGE_ADDED - если вы хотите игнорировать эти события, просто добавьте его в onReceive ():

if(!(intent.getExtras() != null &&
    intent.getExtras().containsKey(Intent.EXTRA_REPLACING) &&
    intent.getExtras().getBoolean(Intent.EXTRA_REPLACING, false))) {

    //DO YOUR THING
}

Это из документов:

EXTRA_REPLACING Added in API level 3 String EXTRA_REPLACING Used as a boolean extra field in ACTION_PACKAGE_REMOVED intents to indicate that this is a replacement of the package, so this broadcast will immediately be followed by an add broadcast for a different version of the same package. Constant Value: "android.intent.extra.REPLACING"

 03 авг. 2017 г., 14:36
Я хочу, чтобы моя трансляция инициировала событие, только когда приложение установлено или удалено, но не при обновлении приложения. Как справиться с этим?
Решение Вопроса

В вашем манифесте:

<receiver android:name=".apps.AppListener">
    <intent-filter android:priority="100">
         <action android:name="android.intent.action.PACKAGE_INSTALL"/>
         <action android:name="android.intent.action.PACKAGE_ADDED"/>  
         <action android:name="android.intent.action.PACKAGE_REMOVED"/>
    </intent-filter>
</receiver>

Добавьте строку перед тегом intent-filter

<data android:scheme="package"/>

Итак, ваш манифест должен выглядеть так:

<receiver android:name=".apps.AppListener">
    <intent-filter android:priority="100">
         <action android:name="android.intent.action.PACKAGE_INSTALL"/>
         <action android:name="android.intent.action.PACKAGE_ADDED"/>  
         <action android:name="android.intent.action.PACKAGE_REMOVED"/>
         <data android:scheme="package"/> 
    </intent-filter>
</receiver>

Не уверен насчет намерения PACKAGE_REMOVED, если оно действительно доступно.

 01 мая 2013 г., 06:38
Сработало +1 .. thnx
 22 июн. 2015 г., 09:09
@ rup35h arg1.getDataString () вернет "пакет: имя_установки_пакета" & quot; просто как & quot; пакет: com.google.joke & quot;
 21 февр. 2018 г., 23:10
Это не сработало для меня. У меня есть несколько действий в моем фильтре намерений. Среди которых PACKAGE_FULLY_REMOVED правильно запускает onCreate моего получателя, однако PACKAGE_ADDED просто не делает. Мое приложение уже запущено, я экспортировал = & quot; true & quot; для получателя и я включил & lt; данные android: схема = & quot; пакет & quot; / & GT; согласно вашему предложению. Я что-то здесь упускаю?
 20 окт. 2017 г., 12:00
PACKAGE_INSTALL бесполезен, устарел и никогда не использовался Google:developer.android.com/reference/android/content/…

Вы должны устранитьandroid.intent.action.PACKAGE_INSTALL как это устарело и больше не рекомендуется, потому что это только для системы. Все остальное идеально, и я бы порекомендовал вместо 100, поставить 999, документация не дает максимальное или минимальное число для использования, чем больше число, тем выше приоритет будет иметь ваш получатель для этого намерения. Извините за переводчик. Я говорю и пишу по-испански. Информация

<receiver android:name=".apps.AppListener">
<intent-filter android:priority="999">
     <action android:name="android.intent.action.PACKAGE_ADDED"/>  
     <action android:name="android.intent.action.PACKAGE_REMOVED"/>
     <data android:scheme="package"/> 
</intent-filter>

 01 мая 2013 г., 06:38
Большое спасибо @kiddie ....

Ваш ответ на вопрос