2013-06-09 2 views
1

У меня есть несколько приложений, установленные для загрузки торрентов (Ttorrent, Utorrent и т.д ..), но когда я запускаю этот код в моем приложенииAndroid: торрент Намерение

Intent i = new Intent(Intent.ACTION_VIEW); 
    i.addCategory(Intent.CATEGORY_DEFAULT); 
    i.setType("application/x-bittorrent"); 
    i.setData(Uri.parse(movie.getTorrentUrl())); 
    startActivity(Intent.createChooser(i, "view")); 

я «ни одно приложение не может выполнить это действие ".

+0

Возможно, у вас есть Bittorrent в вашем телефоне? – Cjames

+0

Да, он существует! Если я удалю строку addCategory, выбор начнется, и в нем будут показаны торрент-приложения, но также будут показаны приложения для браузера. Я хотел бы показать только торрент-приложение в Chooser – TheModularMind

ответ

0

Я решил получать намерение для каждого приложения, которое может обрабатывать мои действия, а затем я выполняю некоторые фильтры на основе умысла имени пакета (в моем случае я могу проверить, если пакет содержит «торрент» слово). Здесь код:

public Intent generateTorrentIntent(Context context, String action, Intent intent) { 
    final PackageManager packageManager = context.getPackageManager(); 
    List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent, 
      PackageManager.MATCH_DEFAULT_ONLY); 
    if (resolveInfo.size() > 0) { 
     List<Intent> targetedShareIntents = new ArrayList<Intent>(); 
     for (ResolveInfo r : resolveInfo) { 
      Intent progIntent = (Intent)intent.clone(); 
      String packageName = r.activityInfo.packageName; 

      progIntent.setPackage(packageName); 
      if (r.activityInfo.packageName.contains("torrent")) 
       targetedShareIntents.add(progIntent); 

     } 
     if (targetedShareIntents.size() > 0) { 
      Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), 
        "Select app to share"); 

      chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, 
        targetedShareIntents.toArray(new Parcelable[] {})); 

      return chooserIntent; 
     } 
    } 
    return null; 
} 
+0

Поскольку вы решили проблему с этим ответом, пожалуйста, отметьте это как ответ. – Sufian

0

Видимо, эти приложения не поддерживают эту конкретную Intent структуры. Например, возможно, какая бы схема ни находилась в этом URL-адресе, это тот, который они не понимают.

Возможно, вы поговорите со своими авторами и спросите их, есть ли какие-то Intent, которые вы можете использовать для такого рода операций, и может ли он добавить один, если они еще ничего не поддерживают.

Смежные вопросы