標籤:
Android中 一個應用啟動另外一個應用一般有2種情況,
被啟動應用的包名已知 和 未知兩種情況:
1 被啟動應用的包名已知:
/**啟動另外應用的代碼,其中被啟動的應用的包名為packageName, 應用的入口為packageName.MainActivity, 此方法的2個應用的AndroidManifest.xml檔案都不需要修改 **/ Intent intent = new Intent(); intent.setComponent(new ComponentName("packageName","packageName.MainActivity")); intent.setAction(Intent.ACTION_VIEW); startActivity(intent);
2 被啟動應用的包名未知:
這種情況雖然是不知道應用的包名,但是最終啟動應用還是通過包名啟動。所以要通過一種方法獲得手機內應用的包名。
手機內分系統預裝應用和非系統自己安裝的應用,可以通過下邊的方法判斷,返回一個包名的List集合:
public List<PackageInfo> getAllApps() { List<PackageInfo> apps = new ArrayList<PackageInfo>(); PackageManager packageManager = this.getPackageManager(); //擷取手機內所有應用 List<PackageInfo> paklist = packageManager.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; }
由於這是個包名的List集合:我們仍不能確定我們要啟動的應用是哪個,沒關係,我們還可以進一步擷取應用程式名稱。
public String[] launchApp() { PackageManager packageManager = this.getPackageManager(); List<PackageInfo> packages = getAllApps(); str3=new String[packages.size()]; PackageInfo pa = null; for(int i=0;i<packages.size();i++){ pa = packages.get(i); //獲得應用程式名稱。這裡的str3是我定義的一個數組,承載應用程式名稱。 str3[i] = packageManager.getApplicationLabel(pa.applicationInfo).toString(); } return str3; }
最後可以根據我們要啟動的應用程式名稱和String[]組數的每一項做判斷。若為true,則啟動應用,若為fause,則進行下一項判斷。
Android應用中如何啟動另一個應用