使用意图过滤器共享文本,链接和图像时遇到麻烦

时间:2018-04-07 15:03:04

标签: android intentfilter

我正在实现意图过滤器以共享某种信息。但它遇到了问题。

btnShareLocInfo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent shareIntent = new Intent();
                shareIntent.setAction(Intent.ACTION_SEND);
                shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Location Name:" + locName.getTitle());
                shareIntent.putExtra(Intent.EXTRA_TEXT, locName.getTitle());
                shareIntent.putExtra(Intent.EXTRA_TEXT, locName.getDescription());
                shareIntent.putExtra(Intent.EXTRA_TEXT, getLocUri().toString());
                shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse(getResources().getString(R.string.image_url) + locName.getImage1()));
                shareIntent.setType("image/*");
                shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                startActivity(Intent.createChooser(shareIntent, "Share via"));
            }
        });

此处显示主题和链接中的标题,但不显示文本正文中的标题,说明。 另外在链接点击我想检查手机中是否安装了应用程序,这也不行。

我已经找到了类似的问题,但任何解决方案都不适用于我。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

Bundle使用ArrayMap内部存储信息。如果您使用相同的键多次使用putExtra方法,则替换该值。 ArrayMap的表单文档:

> /**
>      * Add a new value to the array map.
>      * @param key The key under which to store the value.  If
>      * this key already exists in the array, its value will be replaced.
>      * @param value The value to store for the given key.
>      * @return Returns the old value that was stored for the given key, or null if there
>      * was no such key.
>      */

因此,连接使用putExtra中的信息多次使用相同的密钥。 像这样:

String data = locName.getTitle() + locName.getDescription() + getLocUri().toString();

shareIntent.putExtra(Intent.EXTRA_TEXT,data);

而不是检查是否安装了应用程序,您可以使用此方法。

public boolean isAppInstalled(Context context, String packageName) {
    try {
        context.getPackageManager().getApplicationInfo(packageName, 0);
        return true;
    }
    catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}

并使用它:

isAppInstalled(myContext,"com.whatsapp"); // for checking whatsapp