【问题标题】:Android - Share content on social mediaAndroid - 在社交媒体上分享内容
【发布时间】:2021-05-25 01:38:06
【问题描述】:

我有一个显示图像、描述和其他附加信息的 Android 应用程序屏幕。我想通过社交媒体(如 Facebook、Twitter 等)分享这个。基本上我想发送图像、小文本和 URL。我添加了一个分享按钮并使用了这段代码:

            Intent shareIntent = new Intent();
            shareIntent.setAction(Intent.ACTION_SEND);
            Uri uriToImage = Uri.parse("http://remote.path.to.image.jpg");
            shareIntent.putExtra(Intent.EXTRA_TEXT, "Learn more about this");
            shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
            shareIntent.setType("*/*");
            startActivity(Intent.createChooser(shareIntent, "Share"));

但是这不起作用。我已经用 Facebook 对其进行了测试,当它显示工作表并让我选择 Facebook 时,我看到的是一条空消息;没有附上文字和图片。如果我尝试使用 GMail,它只会附加文本并提到无法附加图像。

另外,我怎样才能包含我想分享的 URL?

我正在使用 Java。

【问题讨论】:

  • 实现滑翔库implementation 'com.github.bumptech.glide:glide:4.12.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
  • @Mohanasundar 我尝试了您发送的示例,但是 String path = MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), resource, "", null);导致错误: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=25464, uid=10078 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()跨度>
  • 问题是您没有 WRITE_EXTERNAL_STORAGE 的权限,请参阅我的回答以获得运行时存储权限

标签: android android-sharesheet


【解决方案1】:

在您的清单文件中添加这一行

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission
        android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />

在应用标签内添加这一行

<application
        android:requestLegacyExternalStorage="true">

在您的 java 文件中询问运行时存储权限

private static final int STORAGE_PERMISSION = 101;
private void requestStoragePermissions() {
        if (!hasStoragePermission(getApplicationContext())) {
            ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE}, STORAGE_PERMISSION);
        } else {
            imagePick();//start you image activities
        }
    }


    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NotNull int @NotNull [] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == STORAGE_PERMISSION) {
            if (validateGrantedPermissions(grantResults)) {
                imagePick();//start you image activities
            }
            }
        }
    }

    public static boolean hasStoragePermission(Context context) {
        int finePermissionCheck = ContextCompat.checkSelfPermission(context,
                Manifest.permission.READ_EXTERNAL_STORAGE);
        int coursePermissionCheck = ContextCompat.checkSelfPermission(context,
                Manifest.permission.WRITE_EXTERNAL_STORAGE);
        return !(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
                && (finePermissionCheck == PackageManager.PERMISSION_DENIED
                || coursePermissionCheck == PackageManager.PERMISSION_DENIED));
    }

    public static boolean validateGrantedPermissions(int[] grantResults) {
        boolean isGranted = true;
        if (grantResults != null && grantResults.length > 0) {
            for (int grantResult : grantResults) {
                if (grantResult == PackageManager.PERMISSION_DENIED) {
                    isGranted = false;
                    break;
                }
            }
            return isGranted;
        } else {
            return false;
        }
    }

【讨论】:

    猜你喜欢
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 2013-11-27
    • 1970-01-01
    • 2012-12-06
    • 2016-07-22
    相关资源
    最近更新 更多