Получение пакетов для установки и удаления

Я пытаюсь обнаружить, когда новое приложение устанавливается, но только если мое приложение работает. Мне удалось обнаружить установку приложения, сделав BroadcastReceiver и активировав его в файле AndroidManifest, но это обнаружит, даже если мое приложение будет закрыто. Поэтому мне нужно вручную активировать и деактивировать трансляционный приемник. Для этого у меня есть этот код:

br = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Log.i("Enter", "Enters here"); Toast.makeText(context, "App Installed!!!!.", Toast.LENGTH_LONG).show(); } }; IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL); registerReceiver(br, intentFilter); 

Это должно сделать тост при установке нового приложения. Но, к сожалению, это не так. Он не входит в метод onReceive. Любая помощь приветствуется.

Solutions Collecting From Web of "Получение пакетов для установки и удаления"

Я попытался зарегистрировать BroadcastReceiver в файле манифеста или Java-коде. Но оба этих метода не смогли вызвать метод onReceive() . После поиска этой проблемы я нашел решение для обоих методов из другого потока в SO: Android Notification App

В файле манифеста:

 <receiver android:name=".YourReceiver"> <intent-filter> <action android:name="android.intent.action.PACKAGE_INSTALL" /> <action android:name="android.intent.action.PACKAGE_ADDED" /> <data android:scheme="package"/> </intent-filter> </receiver> 

В java-коде:

 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL); intentFilter.addDataScheme("package"); registerReceiver(br, intentFilter); 

Это должно сработать для вас.

Чтобы добавить к ответу Хуаня выше, вот как получить имя пакета для вновь установленного приложения:

 public class YourReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String packageName=intent.getData().getEncodedSchemeSpecificPart(); } }