【问题标题】:Android Share details via only selected social media AppsAndroid 仅通过选定的社交媒体应用分享详细信息
【发布时间】:2019-03-21 05:40:58
【问题描述】:

我只想与 whatsApp、viber、twitter 和 gmail 应用程序共享消息,因此使用Intent.createChooser 编写我的代码如下,但它不起作用,甚至不显示错误我在片段中调用此方法.. .这段代码在我的另一个项目中工作,我在对话框中调用了这个方法..

 public void shareDetails(String message) {

        List<Intent> intentShareList = new ArrayList<Intent>();
        Intent shareIntent = new Intent();

        List<ResolveInfo>  resolveInfoList = context.getPackageManager().queryIntentActivities(shareIntent, 0);
        try {

            for (ResolveInfo resInfo : resolveInfoList) {
                String packageName = resInfo.activityInfo.packageName;
                String name = resInfo.activityInfo.name;

                if (packageName.contains("om.viber.voip") ||
                        packageName.contains("com.twitter.android") ||
                        packageName.contains("com.google.android.apps.plus") ||
                        packageName.contains("com.google.android.gm") ||
                        packageName.contains("com.whatsapp")) {

                    if (name.contains("com.twitter.android.DMActivity")) {
                        continue;
                    }

                    shareIntent.setComponent(new ComponentName(packageName, name));
                    shareIntent.setAction(Intent.ACTION_SEND);
                    shareIntent.setType("text/plain");
                    shareIntent.putExtra(Intent.EXTRA_TEXT, message);

                    intentShareList.add(shareIntent);
                }
            }
        if (intentShareList.isEmpty()) {
            Toast.makeText(context, "No apps to share !", Toast.LENGTH_SHORT).show();
        } else {
            Intent chooserIntent = Intent.createChooser(intentShareList.remove(0), "Share Product Details via");
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentShareList.toArray(new Parcelable[]{}));
            startActivity(chooserIntent);
        }
    } catch (Exception e) {

    }

}

请帮忙

【问题讨论】:

标签: android android-intent share


【解决方案1】:
String message = "Text I want to share.";
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("text/plain");
share.putExtra(Intent.EXTRA_TEXT, message);

startActivity(Intent.createChooser(share, "Title of the dialog the system will open"));

【讨论】:

  • Dishant 我只想分享 whatsApp、viber、twitter 和 gmail 应用程序
【解决方案2】:

您使用了没有大小的Parcelable。试试这个修改过的。

public void shareDetails(String message) {
    try {

        List<Intent> intentShareList = new ArrayList<Intent>();
        Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
        shareIntent.setType("text/plain");
        List<ResolveInfo> resolveInfoList = getPackageManager().queryIntentActivities(shareIntent, 0);
        if (!resolveInfoList.isEmpty()) {
            for (ResolveInfo resolveInfo : resolveInfoList) {
                String packageName = resolveInfo.activityInfo.packageName;
                Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND);
                targetedShareIntent.setType("text/plain");
                targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);
                if (packageName.contains("om.viber.voip") ||
                        packageName.contains("com.twitter.android") ||
                        packageName.contains("com.google.android.apps.plus") ||
                        packageName.contains("com.google.android.gm") ||
                        packageName.contains("com.whatsapp")) {
                    targetedShareIntent.setPackage(packageName);
                    intentShareList.add(targetedShareIntent);
                }

            }


            if (intentShareList.isEmpty()) {
                Toast.makeText(context, "No apps to share !", Toast.LENGTH_SHORT).show();
            } else {
                Intent chooserIntent = Intent.createChooser(intentShareList.remove(0), "Share Product Details via");
                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentShareList.toArray(new Parcelable[intentShareList.size()]));
                startActivity(chooserIntent);
            }
        }
    } catch (Exception e) {

    }

}

【讨论】:

  • 嗨 Babal ,“没有可共享的应用程序!”安装上述应用程序时总是显示 toast 但 'intentShareList.size() ' 给出正确的值
  • intentShareList.size() 的输出是什么?
  • size=5 但我只在我的设备中安装了 whatapp 和电子邮件应用程序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2016-07-22
  • 1970-01-01
相关资源
最近更新 更多