Android中 一個應用啟動另外一個應用一般有2種情況,被啟動應用的包名已知和未知兩種情況:
*情況一 ==》已知包名通常有兩種方法:
方法一:
[java]
/**啟動另外應用的代碼,其中被啟動的應用的包名為org.hy,應用的入口為org.hy.Test222Activity,此方法的2個應用的AndroidManifest.xml文件都不需要修改**/
Intent intent = new Intent();
intent.setComponent(new ComponentName("org.hy","org.hy.Test222Activity"));
intent.setAction(Intent.ACTION_VIEW);
startActivity(intent);
方法二:
[java]
/**啟動另外應用的代碼,其中被啟動應用的action為org.hy.test222(自己隨便定義),此方法的被啟動的應用的AndroidManifest.xml要做修改**/
Intent intent = new Intent();
intent.setAction("org.hy.test222");
startActivity(intent);
[html]
/**被啟動應用的AndroidManifest.xml**/
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.hy"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Test222Activity"
android:label="@string/app_name">
<intent-filter>
<action android:name="org.hy.test222"/>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
方法二中AndroidManifest.xml中category設置為android.intent.category.DEFAULT的情況是當Intent啟動的時候沒有明確指定啟動哪個antivit時候就要這樣設置。
*情況二 ==》未知包名:
這種情況雖然是不知道應用的包名,但是最終啟動應用還是通過包名啟動。所以要通過一種方法獲得手機內應用的包名。
手機內分系統預裝應用和非系統自己安裝的應用,可以通過下邊的方法判斷,返回一個包名的List集合:
[java]
/**獲得手機內應用的包名,返回一個List集合**/
public List<PackageInfo> getAllApps() {
List<PackageInfo> apps = new ArrayList<PackageInfo>();
PackageManager packageManager = this.getPackageManager();
//獲取手機內所有應用
List<PackageInfo> paklist = pManager.getInstalledPackages(0);
for (int i = 0; i < paklist.size(); i++) {
PackageInfo pak = (PackageInfo) paklist.get(i);
//判斷是否為非系統預裝的應用 (大於0為系統預裝應用,小於等於0為非系統應用)
if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
apps.add(pak);
}
}
return apps;
}
獲得包名後,就可以通過獲得要啟動的包名啟動應用瞭
[java]
public void launchApp() {
PackageManager packageManager = this.getPackageManager();
List<PackageInfo> packages = getAllApps();
PackageInfo pa = null;
for(int i=0;i<packages.size();i++){
pa = packages.get(i);
//獲得應用名
String appLabel = packageManager.getApplicationLabel(pa.applicationInfo).toString();
//獲得包名
String appPackage = pa.packageName;
Log.d(""+i, appLabel+" "+appPackage);
}
Intent intent = packageManager.getLaunchIntentForPackage("jp.co.johospace.jorte");//"jp.co.johospace.jorte"就是我們獲得要啟動應用的包名
startActivity(intent);
}
摘自 心飛揚