Android 開發有時需要在一個應用中啟動另一個應用,比如Launcher載入所有的已安裝的程式的列表,當點擊表徵圖時可以啟動另一個應用。 一般我們知道了另一個應用的包名和MainActivity的名字之後便可以直接通過如下代碼來啟動:
Intent intent = new
Intent(Intent.ACTION_MAIN); |
2 |
intent.addCategory(Intent.CATEGORY_LAUNCHER);
|
3 |
ComponentName cn = new
ComponentName(packageName, className); |
4 |
intent.setComponent(cn); |
但是更多的時候,我們一般都不知道應用程式的啟動Activity的類名,而只知道包名,我們可以通過ResolveInfo類來取得啟動Acitivty的類名。
下面是實現代碼:
private void openApp(String packageName) { |
02 |
PackageInfo pi = getPackageManager().getPackageInfo(packageName,
0 ); |
04 |
Intent resolveIntent = new
Intent(Intent.ACTION_MAIN, null ); |
05 |
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); |
06 |
resolveIntent.setPackage(pi.packageName); |
08 |
List<ResolveInfo> apps = pm.queryIntentActivities(resolveIntent,
0 ); |
10 |
ResolveInfo ri = apps.iterator().next(); |
12 |
String packageName = ri.activityInfo.packageName; |
13 |
String className = ri.activityInfo.name; |
15 |
Intent intent = new
Intent(Intent.ACTION_MAIN); |
16 |
intent.addCategory(Intent.CATEGORY_LAUNCHER); |
18 |
ComponentName cn = new
ComponentName(packageName, className); |
20 |
intent.setComponent(cn); |
21 |
startActivity(intent); |