web-dev-qa-db-ja.com

共有インテントに特定のアプリを強制的に開く方法は?

私は共有の意図が好きです。画像とテキストのパラメーターで共有アプリを開くのに最適です。

しかし、私は現在、共有インテントに与えられたパラメーターを使用して、リストから特定のアプリを開くように共有インテントを強制する方法を調査しています。

これは私の実際のコードです。電話にインストールされている共有アプリのリストが表示されます。公式Twitterアプリなど、強制するためにコードに何を追加する必要があるか教えてもらえますか?そして公式のファッケボックアプリ?

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
Uri screenshotUri = Uri.parse("file:///sdcard/test.jpg");  
sharingIntent.setType("image/*");
sharingIntent.putExtra(Intent.EXTRA_TEXT, "body text");
sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
startActivity(Intent.createChooser(sharingIntent, "Share image using"));

ありがとう

24

Facebookの場合

public void shareFacebook() {
        String fullUrl = "https://m.facebook.com/sharer.php?u=..";
        try {
            Intent sharingIntent = new Intent(Intent.ACTION_SEND);
            sharingIntent.setClassName("com.facebook.katana",
                    "com.facebook.katana.ShareLinkActivity");
            sharingIntent.putExtra(Intent.EXTRA_TEXT, "your title text");
            startActivity(sharingIntent);

        } catch (Exception e) {
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(fullUrl));
            startActivity(i);

        }
    }

Twitter用。

public void shareTwitter() {
        String message = "Your message to post";
        try {
            Intent sharingIntent = new Intent(Intent.ACTION_SEND);
            sharingIntent.setClassName("com.Twitter.Android","com.Twitter.Android.PostActivity");
            sharingIntent.putExtra(Intent.EXTRA_TEXT, message);
            startActivity(sharingIntent);
        } catch (Exception e) {
            Log.e("In Exception", "Comes here");
            Intent i = new Intent();
            i.putExtra(Intent.EXTRA_TEXT, message);
            i.setAction(Intent.ACTION_VIEW);
            i.setData(Uri.parse("https://mobile.Twitter.com/compose/Tweet"));
            startActivity(i);
        }
    }
38
Xorsat

これを行うにはより一般的な方法があり、アプリケーションインテントの完全なパッケージ名を知る必要はありません。

この投稿を参照してください: Androidで共有インテントをカスタマイズする方法?

7
Derzu

100%作業ソリューション

必要なアプリで何かを共有したり、すべてのアクションでURLを開いたりする場合は、次のメソッドを使用します。

private void shareOrViewUrlViaThisApp(String appPackageName, String url) {
    boolean found = false;
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse(url));

    List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(intent, 0);
    if (!resInfo.isEmpty()){
        for (ResolveInfo info : resInfo) {
            if (info.activityInfo.packageName.toLowerCase().contains(appPackageName) ||
                    info.activityInfo.name.toLowerCase().contains(appPackageName) ) {

                intent.setPackage(info.activityInfo.packageName);
                found = true;
                break;
            }
        }
        if (!found)
            return;

        startActivity(Intent.createChooser(intent, "Select"));
    }
}

そして単に呼び出す:

shareOrViewUrlViaThisApp(<your package name>,<your url>);

この回答は this から発想を得たものです。