根据分支在Android分享意图演员哪种方法选择分享(Branching the Android S

2019-07-18 12:13发布

只是想分享一个动态文本字符串+的URL应用程序。 原生的Android份额意图是设置正确,并努力完善与Twitter,Gmail等但是,正如许多人会想,它不与Facebook合作。 Appearantly因为Facebook不会接受文本intent.EXTRA_TEXT场,只有一个网址。

好了,我给你们的问题:是否有岔开这取决于哪种方法选择分享的份额意图额外的方法吗? 例如,如果他们通过Gmail或Twitter共享,使用现有的String + URL (所需要的选项) EXTRA_TEXT ,但如果他们选择通过Facebook共享,仅使用URL作为EXTRA_TEXT

不是真的想要实现Facebook Android SDK中的是内置的原生Android中这样一个简单的任务。

感谢您的时间和建议。

试过这样的事情,但由于其只检查是否共享选项存在(当份额弹出,而不是之后他们点击一个共享的方法),当他们选择的方法不响应它显然失败。

  String shareBody = "app string text " + act_txt + " more text! Get the app at http://www.appurl.com";

 PackageManager pm = view.getContext().getPackageManager();
    List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0);
    for(final ResolveInfo app : activityList) {
         Log.i(TAG, "app.actinfo.name: " + app.activityInfo.name);
        //if((app.activityInfo.name).contains("facebook")) {
              if("com.facebook.katana.ShareLinkActivity".equals(app.activityInfo.name)) {


            sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "http://www.appurl.com");
            startActivity(Intent.createChooser(sharingIntent, "Share idea"));
            break;
        } else {
            sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "app name");
            sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
            startActivity(Intent.createChooser(sharingIntent, "Share"));
            break;
        }
    }

Answer 1:

找到了解决方法,在此SO问题,问其他的东西: https://stackoverflow.com/a/8550043/1938669

尝试张贴了我原来的问题在这里很接近。 可能shareIntent名单的那个周期内,您需要创建针对特定的共享选择一个新的共享意向(如Facebook或Twitter)

这里是共享只有当Facebook是选择了一个URL的最终有效的解决方案,否则共享完整的文本字符串+网址:

public void shareIt(View view){
    //sharing implementation
    List<Intent> targetedShareIntents = new ArrayList<Intent>();
    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
    sharingIntent.setType("text/plain");
    String shareBody = "string of text " + txt_var + " more text! Get the app at http://someapp.com";

    PackageManager pm = view.getContext().getPackageManager();
    List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0);
    for(final ResolveInfo app : activityList) {

         String packageName = app.activityInfo.packageName;
         Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND);
         targetedShareIntent.setType("text/plain");
         targetedShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "share");
         if(TextUtils.equals(packageName, "com.facebook.katana")){
             targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "http://someurl.com");
         } else {
             targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
         }

         targetedShareIntent.setPackage(packageName);
         targetedShareIntents.add(targetedShareIntent);

    }

    Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Share Idea");

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

}


文章来源: Branching the Android Share Intent extras depending on which method they choose to share