2017-01-10 25 views
1

が存在する場合、私は、それはそれ以外のアプリにしてブラウザにインストールされます場合はFBネイティブアプリでの通知で受信したリンクを開いて、このコードを使用していますチェック:アンドロイド - Facebookアプリが戻って間違った結果

PackageManager packageManager = context.getPackageManager(); 
try { 
    packageManager.getPackageInfo("com.facebook.katana", PackageManager.GET_ACTIVITIES); 
    return context.getString(R.string.fb_app_prefix) + fb_url; 
} catch (PackageManager.NameNotFoundException e) { 
    return context.getString(R.string.fb_site_prefix) + fb_url; //normal web mUrl 
} 

をそれが動作します(エミュレータを含む)ほとんどのデバイスでは、アプリケーションがインストールされていないにもかかわらずエラーが発生することはありません。

私のコードで何が問題になっていますか?

は私が持っているすべてのリンクのために、次のコードを追加することができますが、わからないことは「健康」です:

Intent testIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(fb_app_url)); 
if (testIntent.resolveActivity(packageManager) != null) { 
    return fb_app_url; 
} 

答えて

0
public static boolean isPackageExisted(Context c, String targetPackage) { 
PackageManager pm = c.getPackageManager(); 
    try { 
     PackageInfo info = pm.getPackageInfo(targetPackage, 
       PackageManager.GET_META_DATA); 
    } catch (NameNotFoundException e) { 
     return false; 
    } 
    return true; 
} 
+0

違いは何ですか? this - PackageManager.GET_META_DATA? – Rani

+0

差異: GET_ACTIVITIES PackageInfoフラグ:アクティビティのパッケージ内のアクティビティに関する情報を返します。 GET_META_DATA ComponentInfoフラグ:metaDataデータを返します。コンポーネントに関連付けられたバンドル。 はい、それは私のために働く。 –

+1

私はそれをチェックアウトします。ありがとう – Rani