Androidが他のアプリを開く2つの方法

2963 ワード

実際の開発では、個別のアプリを開く必要があるかもしれませんが、Androidが自分のアプリケーションで他のアプリケーションを開く方法を紹介します.
方法1:パッケージ名とデフォルトで起動されたActivityを知っている場合は、次のように開くことができます.
 
Intent intent = new Intent();
ComponentName cn = new ComponentName("packageName", "     activity");
intent.setComponent(cn);
startActivity(intent);

例:
Intent intent = new Intent();
ComponentName cn = new ComponentName("com.example.demo", "com.example.demo.MainActivity");
intent.setComponent(cn);
startActivity(intent);

上記のコードは、comというパッケージを開きます.example.demo、デフォルト起動Activityはcom.example.demo.MainActivityのアプリ
 
この方法は簡単ですが、実際に開くアプリのパッケージ名はわかりませんし、開くアプリのデフォルト起動Activityもわかりません.次は別のアプリを開く方法を上演します.
 
方式2:アプリケーションパッケージ名も知らないし、デフォルト起動Activityも知らない場合、アプリを開く
(1)最初のステップは、開くAPPのパッケージ名を取得することであり、1つのAPPのパッケージ名は以下のコードで取得することができる
 
private void getAppInfo(Context context) throws Exception{
        PackageManager packageManager = context.getPackageManager();
        //       app
        List installedPackages = packageManager.getInstalledPackages(0);
        for(PackageInfo info : installedPackages){
            String packageName = info.packageName;//app  
            ApplicationInfo ai = packageManager.getApplicationInfo(packageName, 0);
            String appName = (String) packageManager.getApplicationLabel(ai);//      
        }
    }

(2)ステップ2で取得したアプリ名から、対応するアプリのパッケージ名を見つけることができます.これで、一つのアプリのパッケージ名がわかります.次に、パッケージ名でアプリを開きます.
 
public static void openApp(Context context, String packageName) {
        final Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        context.startActivity(intent);
    }

方式3:scheme構成によりactivityを起動し、コード構成は以下の通りである.


            
                
                
                
            
        
public static void startActivity(Context context, String intentUrl){
        final Intent intent = initIntent(intentUrl);
        context.startActivity(intent);
    }

    private static Intent initIntent(final String uriString) {
        final Intent intent = new Intent();
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setAction(Intent.ACTION_VIEW);
        intent.setData(Uri.parse(uriString));
        return intent;
    }
  
startActivity(context,"demo://demo_ac")

これで、APPパッケージ名とデフォルト起動Activityが分からないまま、APPを開くことができます.