(共享意图)Android 12中外部共享无法工作。

4
在Android 12更新后,分享意图未能在三星S10设备中正常工作。该代码在Android版本12以下的设备上可以正常工作,但无法找到过滤掉Android 12的原因。
        Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
        sharingIntent.setType("text/plain");
        // (Optional) If you want a preview title, set it with Intent.EXTRA_TITLE
        sharingIntent.putExtra(Intent.EXTRA_TITLE, str_title);
        sharingIntent.putExtra(Intent.EXTRA_TEXT, "https://www.cyranolab.media/msg/?q=507dddd6-8e43-11ec-9d11-061d7e6be791");
        sharingIntent.putExtra(Intent.EXTRA_SUBJECT, str_title);

        Intent receiver = new Intent(getActivityContext, UserSelectedShareBroadcast.class);
  PendingIntent pendingIntent;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            pendingIntent = PendingIntent.getActivity(getActivityContext,
                    0, receiver, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
        }else {
            pendingIntent = PendingIntent.getActivity(getActivityContext,
                    0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
        }

        Intent openInChooser = Intent.createChooser(sharingIntent, "Choose", pendingIntent.getIntentSender());
        List<LabeledIntent> intentList = new ArrayList<>();

        Intent externalEmailIntent = new Intent(getActivityContext, ExternalEmailShareActivity.class);
        externalEmailIntent.putExtra("programId", programId);
        externalEmailIntent.putExtra("sharedResourceId", sharedResourceId);
        externalEmailIntent.putExtra("INBOX", "Inbox");
        intentList.add(new LabeledIntent(externalEmailIntent, "Package Name", "Email to", R.drawable.ic_mail_outline));
        // convert intentList to array
        LabeledIntent[] extraIntents = intentList.toArray(new LabeledIntent[0]);

        openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
        int REQUEST_SHARED_URL = 2;
        getActivityContext.startActivityForResult(openInChooser, REQUEST_SHARED_URL);
    }

我想与其他应用程序共享我的程序。在安卓12更新后,无法共享我的程序。分享意图未打开。


代码不够。我们看不到你在做什么。 - blackapps
分享意图.putExtra(Intent.EXTRA_TEXT, sharedURL); URL 应该在 EXTRA_STREAM 中。此外,我们仍然不知道您的 URL 是什么类型的,您应该详细说明“不起作用”的含义,因为我们不知道这是什么意思。 - blackapps
这是我分享的网址:https://www.cyranolab.media/msg/?q=507dddd6-8e43-11ec-9d11-061d7e6be791。 - Shobana Velmurugan
我尝试使用EXTRA_STREAM,但仍然遇到了这个问题。 - Shobana Velmurugan
@SuppressLint("UnspecifiedImmutableFlag") PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivityContext, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT); Android 12 要求使用 FLAG_IMMUTABLEFLAG_MUTABLE,但您正在抑制警告。 - Per.J
显示剩余2条评论
1个回答

3

缺少FLAG_IMMUTABLE标志 要声明给定的PendingIntent对象是可变的还是不可变的,请分别使用PendingIntent.FLAG_MUTABLE或PendingIntent.FLAG_IMMUTABLE标志。在上面的代码中,我只是添加了这几行:现在可以正常工作了。

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            pendingIntent = PendingIntent.getActivity(getActivityContext,
                    0, receiver, PendingIntent.FLAG_IMMUTABLE);
        }else {
            pendingIntent = PendingIntent.getActivity(getActivityContext,
                    0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接