Androidは携帯電話があるアプリケーションをインストールする方法があるかどうかを確認します。


この実例はAndroidが携帯電話にあるアプリケーションをインストールしているかどうかを確認する方法を述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
携帯電話のユーザーは特に大量の情報を手動で入力するのが嫌で、一つのプログラムで他のプログラムや機能を呼び出すことができます。よくユーザーにより良い体験を与えて、ユーザーに親しみを感じさせます。だから、このような統合は多方面のソフトウェアの協同作業の「ウィン」の局面に役立ちます。
私達は自分のプログラムで他のプログラムを呼び出す時、携帯電話がこのソフトをインストールしたかどうかを確認してから相応の操作をします。インストールしていない場合、intentでユーザーをandroid marketに導いてプログラムをダウンロードします。
携帯電話にあるプログラムがインストールされていると判断する方法を紹介します。

private boolean isAvilible(Context context, String packageName){
     final PackageManager packageManager = context.getPackageManager();//  packagemanager
     List< packageInfo> pinfo = packageManager.getInstalledPackages(0);//             
     List<String> pName = new ArrayList<String>();//              
     // pinfo         ,  pName list 
       if(pinfo != null){
       for(int i = 0; i < pinfo.size(); i++){
         String pn = pinfo.get(i).packageName;
         pName.add(pn);
       }
     }
     return pName.contains(packageName);//  pName           , TRUE,  FALSE
}

以下はこの方法を呼び出して判断するロジックです。

//   ,    ,       :"com.skype.android.verizon"
if(isAvilible(this, "com.skype.android.verizon")){
    Intent i = new Intent();
    ComponentName cn = new ComponentName("com.skype.android.verizon",
        "com.skype.android.verizon.SkypeActivity");
    i.setComponent(cn);
    startActivityForResult(i, RESULT_OK);
}
//   ,   market     
else {
    Uri uri = Uri.parse("market://details?id=com.skype.android.verizon");//id   
    Intent it = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(it);
}
上記の方法は自分で書きました。また、インターネットで以下の方法を調べてみました。大丈夫です。でも、使う時はちょっと問題があります。私が入ってきたパラメータが問題があるかもしれません。次の二つの関数はそれぞれactionとintentに伝えます。試してみてください。
方法1:

public static boolean isIntentAvailable(Context context, String action) {
    final PackageManager packageManager = context.getPackageManager();
    final Intent intent = new Intent(action);
    List<ResolveInfo> list =
        packageManager.queryIntentActivities(intent,
            PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}

方法二:

public boolean isIntentAvailable(Intent intent) {
    final PackageManager packageManager = this.getPackageManager();
    List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
        PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}

インストールされていない場合は、ユーザーをandroid marketに誘導してプログラムをダウンロードし、インストールされている場合はプログラムを開き、パラメータとその機能を呼び出します。
携帯電話にあるプログラムがインストールされていると判断する方法を紹介します。

private boolean isAvilible(Context context, String packageName){
 final PackageManager packageManager = context.getPackageManager();//  packagemanager
 List< packageInfo> pinfo = packageManager.getInstalledPackages(0);//             
 List<String> pName = new ArrayList<String>();//              
 // pinfo         ,  pName list 
   if(pinfo != null){
   for(int i = 0; i < pinfo.size(); i++){
     String pn = pinfo.get(i).packageName;
     pName.add(pn);
   }
 }
 return pName.contains(packageName);//  pName           , TRUE,  FALSE
}

以下はこの方法を呼び出して判断するロジックです。

//   ,    ,       :"com.skype.android.verizon"
if(isAvilible(this, "com.skype.android.verizon")){
    Intent i = new Intent();
    ComponentName cn = new ComponentName("com.skype.android.verizon",
        "com.skype.android.verizon.SkypeActivity");
    i.setComponent(cn);
    startActivityForResult(i, RESULT_OK);
}
//   ,   market     
else {
    Uri uri = Uri.parse("market://details?id=com.skype.android.verizon");//id   
    Intent it = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(it);
}

上記の方法は自分で書きました。また、インターネットで以下の方法を調べてみました。大丈夫です。でも、使う時はちょっと問題があります。私が入ってきたパラメータが問題があるかもしれません。次の二つの関数はそれぞれactionとintentに伝えます。試してみてください。
方法1:

public static boolean isIntentAvailable(Context context, String action) {
    final PackageManager packageManager = context.getPackageManager();
    final Intent intent = new Intent(action);
    List<ResolveInfo> list =
        packageManager.queryIntentActivities(intent,
            PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}

方法二:

public boolean isIntentAvailable(Intent intent) {
    final PackageManager packageManager = this.getPackageManager();
    List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
        PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}

Android関連の内容についてもっと興味がある読者は、当駅のテーマを調べてもいいです。「AndroidビューViewテクニックのまとめ」、「Androidプログラミングのactivity操作技術のまとめ」、「Android操作SQLiteデータベース技術まとめ」、「Android操作json形式データ技術のまとめ」、「Androidデータベース操作技術のまとめ」、「Androidファイルの操作テクニックのまとめ」、「Androidプログラミング開発のSDカード操作方法のまとめ」、「Android開発入門と上級教程」、「Android資源操作技術のまとめ」、「Androidコントロールの使い方のまとめ
ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。