一、啓動一個程序
private void startApp() {
// 創建PackageManager對象
PackageManager pm = getPackageManager();
try {
/*
* flag的作用:標識加載清單文件中的那部分內容,默認不會加載application節點下的內容。
* google工程師這樣做是爲了提升加載的效率,一般我們想獲取PackageInfo的信息,大多數獲取包名,版本信息等。---懶加載
* 一個應用程序中有很多activity節點,如果需要加載activity節點信息,則需要顯示的指明。
*/
PackageInfo infos = pm.getPackageInfo(appInfo.getPackageName(), PackageManager.GET_ACTIVITIES);
ActivityInfo[] activities = infos.activities;
if (activities != null && activities.length > 0) { //activities有可能爲空,有的應用程序沒有activity,比如服務,廣播。
ActivityInfo activityInfo = activities[0]; //一般activities[0]表示啓動activity
String className = activityInfo.name;
Intent intent = new Intent(); //啓動應用程序
intent.setClassName(appInfo.getPackageName(), className);
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(), "親,不能啓動該系統程序", Toast.LENGTH_SHORT).show();
}
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
只要配置了該intent-filter的應用都會接受到該請求。如果其他程序發送分享請求時,想讓自己的程序也獲得請求,則需要創建一個Activity,並設置動作和數據類型
private void shareApp() {
Intent intent = new Intent();
intent.setAction("android.intent.action.SEND");
intent.addCategory("android.intent.category.DEFAULT");
intent.setType("text/plain"); //發送的類型
intent.putExtra(Intent.EXTRA_TEXT, "親,強烈推薦使用" + appInfo.getApp_name() + "軟件,下載地址:http://google.play.com");
startActivity(intent);
}
三、卸載應用程序
private void uninstallApp() {
Intent intent = new Intent();
intent.setAction("android.intent.action.DELETE");
intent.addCategory("android.intent.category.DEFAULT");
intent.setData(Uri.parse("package:" + appInfo.getPackageName()));
startActivityForResult(intent, 0);
}
卸載程序後需要刷新listview顯示內容,可以在代碼中註冊一個廣播,用於接受程序卸載完成後系統發送的廣播。
private void regesterUninstallReceiver() {
UninstallReceiver uninstallReceiver = new UninstallReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.PACKAGE_REMOVED"); //當應用程序被卸載完成後,系統發出的廣播動作
filter.addDataScheme("package"); //android4.0以後需要添加該類型
registerReceiver(uninstallReceiver, filter);
}