2017-02-28 5 views
0

ダイレクトシェア機能を使いたいのですが、アプリを除外する必要があります。アプリを除外して直接共有することはできますか?

除外部分はうまくいきます。私はちょうどその選択肢に一連のインテントを与えていますが、インテントには特定のアプリケーションが1つしか含まれていません。

しかし、この直接共有を行うことは機能しません。

ダイレクトシェアは、チューザにちょうど1つのインテントを与えるときに機能しているようです。

アプリを除外してダイレクトシェアを使用することはできますか?

コードスニペット:意図(How to filter specific apps for ACTION_SEND intent (and set a different text for each app))のリストを共有

final Intent chooserIntent = Intent.createChooser(targetShareIntents.remove(0), "Share with: "); 
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetShareIntents.toArray(new Parcelable[]{})); 
activity.startActivity(chooserIntent); 

directshareとの共有、ない除く:

final Intent sendIntent = new Intent(); 
sendIntent.setAction(Intent.ACTION_SEND); 
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); 
sendIntent.setType("text/plain"); 
activity.startActivity(Intent.createChooser(sendIntent, "Share with:")); 

答えて

1

私はと同じ問題に遭遇しましたダイレクトシェアで、createChooser()に渡されたターゲットインテントでのみ動作するように見えることがわかりました。

"com.android.mms"を検索してcreateChooser()に、targetedShareIntentsを他の文字列に渡すと、少なくともダイレクトシェアがテキストメッセージとして機能することになりました。

いくつかのアプリケーションでは、クラス名をtargetedShareIntentsに設定しないと、Androidシステムが選択肢に表示されることになります。

私の場合、このソリューションは十分ではありません。自分のアプリをリストから除外しないように傾いています。うまくいけば私の努力は誰かをより良いものに導くでしょう。

以下のコードはここで見つけるの例のバリエーションです: Custom filtering of intent chooser based on installed Android package name

私はここを参照してください:http://stackoverflow.com/a/23036439そのsaulpowerがよりよい解決策を持っているかもしれないが、私はそれが私のUIで動作させることはできません。

private void shareExludingApp(Intent intent, String packageNameToExclude, String title) { 
    List<Intent> targetedShareIntents = new ArrayList<Intent>(); 
    List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(intent, 0); 
    Intent directShare = null; 
    if (!resInfo.isEmpty()) { 
     for (ResolveInfo info : resInfo) { 
      Intent targetedShare = new Intent(intent); 
      if (!info.activityInfo.packageName.startsWith(packageNameToExclude)) { 
       targetedShare.setPackage(info.activityInfo.packageName); 
       targetedShare.setClassName(info.activityInfo.packageName, 
         info.activityInfo.name); 
       if (directShare == null && info.activityInfo.packageName.equals("com.android.mms")) { 
        directShare = targetedShare; 
       } else { 
        targetedShareIntents.add(targetedShare); 
       } 
      } 
     } 
    } 
    if (targetedShareIntents.size() > 0) { 
     if (directShare == null) { 
      directShare = targetedShareIntents.remove(0); 
     } 
     Intent chooserIntent = Intent.createChooser(directShare, title); 
     chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, 
       targetedShareIntents.toArray(new Parcelable[] {})); 
     startActivity(chooserIntent); 
    } 
    else { 
     startActivity(Intent.createChooser(intent, title)); 
    } 
} 

使用法:

shareExludingApp(intent, getPackageName(), "Share via"); 
関連する問題