タイトルの通りですが、PACKAGE関連のIntent。


ようは


android.intent.action.PACKAGE_REMOVED
android.intent.action.PACKAGE_ADDED
android.intent.action.PACKAGE_REPLACED
android.intent.action.PACKAGE_REMOVED


だったりをBroadcastReceiverで検知したいときにはまりました。


まぁ単純にSchemeに"package"をかまさないと動かない。。

マニフィストになら

<data android:scheme="package"/>


明示的に作るなら

IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);

filter.addDataScheme("package");


といった事が必要でした。。

動かなくて悩んだ悩んだ。。。


以下はアクテイビティで直接セットしてる例です。


///////////////////////////////////////////////////////////

private final PackageReceiver PackageReceiver = new PackageReceiver();


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


setReceiver();

}

 

@Override
protected void onDestroy() {
super.onDestroy();


delReceiver();

}


//Receiver登録

public void setReceiver(){

IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addDataScheme("package");
getApplicationContext().registerReceiver(PackageReceiver, filter);
}


//Receiver削除
public void delReceiver(){

getApplicationContext().unregisterReceiver(PackageReceiver);
}


public class PackageReceiver extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {
if (intent != null) {

//Intentのアクションで処理を切り分け

if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) {
//処理を...
}
}
}
}