<< Android-Note
パッケージの追加・削除を感知するには
パッケージがインストールされたり、アンインストールされると次のインテントが発行されます。
- ACTION_PACKAGE_ADDED
- ACTION_PACKAGE_REMOVED
パッケージが新規または再インストールされたときに発行
パッケージが削除されたときに発行
このアクションをBroadcastReceiverで受け取ってやればパッケージの追加・削除を感知できます。
手順は次の通りです。
1. BroadcastReceiverの準備
まず、次のような空のレシーバークラスを作ります。
public class PackageRceiver extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent arg1){} }
ここではPackageReceiverという名前のレシーバークラスを作りました。
その後、AndroidManifest.xmlを開いてapplicationタグ内にレシーバーを追加します。
<!-- レシーバーを追加 --> <receiver android:name=".PackageRceiver" > <intent-filter> <action android:name="android.intent.action.PACKAGE_ADDED" /> <action android:name="android.intent.action.PACKAGE_REMOVED" /> <data android:scheme="package" /> </intent-filter> </receiver>
2. レシーバーの実装
実際にパッケージの追加・削除を感知するにはActivityクラスなどにレシーバーを登録します。
class MyActivity extends Activity { private PackageRceiver packageReceiver; private final String LOG_TAG = MyActivity.class.getName(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /**レシーバーを実装・登録*/ IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); filter.addAction(Intent.ACTION_PACKAGE_REMOVED); filter.addDataScheme("package"); packageReceiver = new PackageRceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action.equals(Intent.ACTION_PACKAGE_ADDED)){ Log.i(LOG_TAG, "追加されたパッケージURI = " + intent.getData()); } if(action.equals(Intent.ACTION_PACKAGE_REMOVED)){ Log.i(LOG_TAG, "削除されたパッケージURI = " + intent.getData()); } } }; registerReceiver(packageReceiver, filter); } @Override public void onDestroy() { super.onDestroy(); unregisterReceiver(packageReceiver); ///使わなくなったら必ず登録解除 } }
追加または削除されたパッケージ名のURIはIntentのgetDataから次のような形式で得ることができます。
package:com.xxx.myapp
パッケージ名の前にpackage:がついているので正しいパッケージ名を得るにはpackage:を削除する処理が必要です。
© Kaz