如何解决Android - 在社交媒体上分享内容
我有一个 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,它只会附加文本并提到无法附加图像。
另外,如何包含我想分享的网址?
我正在使用 Java。
解决方法
在您的清单文件中添加这一行
<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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。