【问题标题】:How to force Share Intent to open a specific app?如何强制共享意图打开特定应用程序?
【发布时间】:2012-01-08 16:03:24
【问题描述】:

我喜欢分享意图,非常适合打开带有图像和文本参数的分享应用。

但现在我正在研究强制共享意图从列表中打开特定应用程序的方法,并为共享意图提供参数。

这是我的实际代码,它显示了手机上安装的共享应用程序列表。拜托,有人能告诉我我应该在代码中添加什么来强制例如官方推特应用程序吗?和官方 faccebok 应用?

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"));

谢谢

【问题讨论】:

  • 您有 facebook 相关的问题吗?
  • 如果他们不使用官方推特应用程序,这样做会失败吗?为什么要限制某人的分享方式?

标签: android twitter android-intent share


【解决方案1】:

对于 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);

        }
    }

对于推特。

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);
        }
    }

【讨论】:

  • 我可以为推文附上图片吗?
  • 如果安装了 Twitter 应用程序,它会给出活动未找到异常 enen
  • 完美!!!非常感谢!我已将 PDF 文件附加到我的意图中,如下所示:sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f)); 如果您想知道 setClassName 的字段,您可以使用:java.util.List<ResolveInfo> mApps = new ArrayList<ResolveInfo>(); PackageManager pManager = getPackageManager(); mApps = pManager.queryIntentActivities(target,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
  • 类名未知怎么办(系统Intent选择器可以)
  • instagram 也有类似的东西吗?
【解决方案2】:

有一种更通用的方法可以做到这一点,并且不需要知道应用程序意图的完整包名称。

看到这个帖子: How to customize share intent in Android?

【讨论】:

    【解决方案3】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      相关资源
      最近更新 更多