写了一个Receiver,对android.intent.action.PACKAGE_ADDED的广播进行处理,当接收到该广播时,打开应用。
if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {
try{
if(intent.getDataString().contains("应用包名")) {
Intent myIntent = new Intent();
PackageManager pm = context.getPackageManager();
try {
myIntent = pm.getLaunchIntentForPackage(intent.getDataString().substring(8));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent);
}
}catch(Exception e){
e.printStackTrace();
}
}
但是测试发现,在应用进行更新时,并不能处理自己的PACKAGE_ADDED广播消息。
应用程序无法监听自己的安装与卸载,但覆盖安装可以监听到自己的android.intent.action.PACKAGE_REMOVED广播。
因此,可以把重新打开应用的操作放在收到android.intent.action.PACKAGE_REMOVED广播时进行。
if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {
try{
if(intent.getDataString().contains("应用包名")) {
Intent myIntent = new Intent();
PackageManager pm = context.getPackageManager();
try {
myIntent = pm.getLaunchIntentForPackage(intent.getDataString().substring(8));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent);
}
}catch(Exception e){
e.printStackTrace();
}
}