2012-10-24 20 views
0

未發現異常,我有以下代碼鳴叫從我的應用程序的東西:活動與Twitter

try { 
      Intent intent = new Intent(Intent.ACTION_SEND); 
      intent.setType("text/plain"); 
      intent.putExtra(Intent.EXTRA_TEXT, 
        "Blah blah blah"); 
      final PackageManager pm = getPackageManager(); 
      final List<?> activityList = pm 
        .queryIntentActivities(intent, 0); 
      int len = activityList.size(); 
      for (int i = 0; i < len; i++) { 
       final ResolveInfo app = (ResolveInfo) activityList.get(i); 
       if ("com.twitter.android.PostActivity" 
         .equals(app.activityInfo.name)) { 
        intent.addCategory(Intent.CATEGORY_LAUNCHER); 
        intent.setClassName("com.twitter.android", 
          "com.twitter.android.PostActivity"); 

        startActivity(intent); 
        break; 
       } 
      } 
     } catch (final ActivityNotFoundException e) { 
      onCreateDialog(NO_APP); 
     } 

protected Dialog onCreateDialog(int id) { 
    Dialog dialog; 
    switch (id) { 

    case NO_APP: { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setIcon(R.drawable.icon_small); 
     builder.setTitle("Twitter"); 
     builder.setMessage("No Twitter app found"); 
     builder.setCancelable(false); 
     builder.setPositiveButton("OK", new Dialog.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
       finish(); 
      } 
     }); 

     dialog = builder.create(); 
     return dialog; 
    } 
    default: 
     return super.onCreateDialog(id); 
    } 
} 

如果安裝在手機上的Twitter,然後應用程序工作正常,並生成一個新的鳴叫。如果該應用程序不存在,我想要出現一個對話框,指出沒有應用程序。但是,到目前爲止,手機中沒有任何推特應用程序時沒有任何反應。當我按下我的應用程序上的推文按鈕時,什麼也沒有發生。在這種情況下,我需要做什麼來使對話框出現?

+0

你想從你的應用程序執行官方的twitter應用程序嗎?你是否知道,無論你有沒有應用程序,都存在官方api來嘲諷某些東西? – Blackbelt

回答

1

如果沒有找到twitter應用程序,也沒有例外。 你的代碼更改爲:

try { 
boolean found = false; 
      Intent intent = new Intent(Intent.ACTION_SEND); 
      intent.setType("text/plain"); 
      intent.putExtra(Intent.EXTRA_TEXT, 
        "Blah blah blah"); 
      final PackageManager pm = getPackageManager(); 
      final List<?> activityList = pm 
        .queryIntentActivities(intent, 0); 
      int len = activityList.size(); 
      for (int i = 0; i < len; i++) { 
       final ResolveInfo app = (ResolveInfo) activityList.get(i); 
       if ("com.twitter.android.PostActivity" 
         .equals(app.activityInfo.name)) { 
found = true; 
        intent.addCategory(Intent.CATEGORY_LAUNCHER); 
        intent.setClassName("com.twitter.android", 
          "com.twitter.android.PostActivity"); 

        startActivity(intent); 
        break; 
       } 
      } 
if(!found) onCreateDialog(NO_APP); 
     } catch (final ActivityNotFoundException e) { 
      onCreateDialog(NO_APP); 
     } 

或嘗試啓動Twitter應用和處理未發現異常。

try { 

      Intent intent = new Intent(); 
      intent.addCategory(Intent.CATEGORY_LAUNCHER); 
      intent.setClassName("com.twitter.android", "com.twitter.android.PostActivity"); 
      startActivity(intent); 

     } catch (final ActivityNotFoundException e) { 
      onCreateDialog(NO_APP); 
     } 
+0

謝謝!那工作。但是爲什麼沒有發現Twitter時沒有例外? – Ankush

+0

因爲ActivityNotFoundException在您嘗試啓動活動時觸發,或者在您的代碼中未找到Twitter活動,所以您沒有啓動Twitter意向。我將編輯答案以向您展示如何處理異常。 PS:如果答案是有用的接受它;) –