2025-05-17

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);   
        }   
 
摘自  心飛揚

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *