アプリが実行されている場合にのみ、新しいアプリがインストールされていることを検出しようとしています。 BroadcastReceiverを作成してAndroidManifestファイル内でアクティブにすることで、アプリのインストールを検出できましたが、アプリが閉じていても検出できます。そのため、broadcastreveiverを手動でアクティブおよび非アクティブにする必要があります。これを行うには、このコードがあります:
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メソッドには入りません。どんな助けも大歓迎です。
マニフェストファイルまたはJavaコード)にBroadcastReceiver
を登録しようとしましたが、これら2つのメソッドは両方ともonReceive()
メソッドをトリガーできませんでした。問題、SOの別のスレッドから両方のメソッドのソリューションを見つけました: Android Notification App
マニフェストファイル(では、このアプローチはAPI 26(Android 8)以降適用されなくなり、以前のAndroid versions):
<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>
In Java code:
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL);
intentFilter.addDataScheme("package");
registerReceiver(br, intentFilter);
これはあなたのために働くはずです。
上記のHuangの回答に追加するために、新しくインストールされたアプリケーションのパッケージ名を取得する方法を次に示します。
public class YourReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String packageName = intent.getData().getEncodedSchemeSpecificPart();
}
}
他の回答は、_ACTION_PACKAGE_ADDED
_および_ACTION_PACKAGE_REPLACED
_ブロードキャストのリッスンを示しています。 Android 7.1以前では問題ありません。Android 8.0+では、マニフェストにこれらのブロードキャストを登録できません。
代わりに、定期的なPackageManager
ジョブなどを使用して、 JobScheduler
でgetChangedPackages()
を呼び出す を定期的に行う必要があります。これにより、リアルタイムの結果は得られませんが、リアルタイムの結果はAndroid 8.0+。