尝试分享图片时出错
Error when trying to share an image
所以我截屏了我的 activity,然后将其保存到 "screenshot.png"。当尝试通过 Whatsapp 分享它时,我收到错误消息:"could not send image"。与 gmail、pushbullet 和基本上所有其他应用程序相同。因此,我得出结论 文件 以某种方式存在,但它要么是空的,要么是乱七八糟的……老实说,我不知道。
代码如下:
截取 activity 屏幕截图:
public Bitmap takeScreenshot() {
View rootView = findViewById(android.R.id.content).getRootView();
rootView.setDrawingCacheEnabled(true);
return rootView.getDrawingCache();
}
保存截图:
public void saveBitmap(Bitmap bitmap) {
FileOutputStream fos;
String filePath = getApplicationContext().getFilesDir().getPath().toString() + "/screenshot.png";
File f = new File(filePath);
try {
fos = new FileOutputStream(f);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
Log.e("GREC", e.getMessage(), e);
} catch (IOException e) {
Log.e("GREC", e.getMessage(), e);
}
}
最后,分享本身:
if (id == R.id.action_share){
Bitmap bitmap = takeScreenshot();
saveBitmap(bitmap);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/png");
share.putExtra(Intent.EXTRA_STREAM, Uri.parse("screenshot.png"));
startActivity(Intent.createChooser(share, "Teilen via"));
}
我的错误在哪里?我在 logcat 中没有收到任何错误,但我无法共享 "screenshot"。
首先,你应该使用:
share.putExtra(Intent.EXTRA_STREAM. Uri.fromFile(new File(getApplicationContext().getFilesDir().getPath().toString() + "/screenshot.png"));
但是你会得到 "Permission denied for the attachment" 你可能会尝试但没有运气:(
share.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
所以处理这个问题的最好方法可能是将捕获的屏幕截图存储在媒体库中,然后从那里发送文件。
public void share() {
String filePath=getApplicationContext().getFilesDir().getPath().toString() + "/screenshot.png";
String path;
try {
path = Images.Media.insertImage(getContentResolver(), filePath, "title", null);
Uri screenshotUri = Uri.parse(path);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/png");
share.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
share.putExtra(Intent.EXTRA_STREAM, screenshotUri);
startActivity(Intent.createChooser(share, "Teilen via"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
希望对您有所帮助!
所以我截屏了我的 activity,然后将其保存到 "screenshot.png"。当尝试通过 Whatsapp 分享它时,我收到错误消息:"could not send image"。与 gmail、pushbullet 和基本上所有其他应用程序相同。因此,我得出结论 文件 以某种方式存在,但它要么是空的,要么是乱七八糟的……老实说,我不知道。
代码如下:
截取 activity 屏幕截图:
public Bitmap takeScreenshot() {
View rootView = findViewById(android.R.id.content).getRootView();
rootView.setDrawingCacheEnabled(true);
return rootView.getDrawingCache();
}
保存截图:
public void saveBitmap(Bitmap bitmap) {
FileOutputStream fos;
String filePath = getApplicationContext().getFilesDir().getPath().toString() + "/screenshot.png";
File f = new File(filePath);
try {
fos = new FileOutputStream(f);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
Log.e("GREC", e.getMessage(), e);
} catch (IOException e) {
Log.e("GREC", e.getMessage(), e);
}
}
最后,分享本身:
if (id == R.id.action_share){
Bitmap bitmap = takeScreenshot();
saveBitmap(bitmap);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/png");
share.putExtra(Intent.EXTRA_STREAM, Uri.parse("screenshot.png"));
startActivity(Intent.createChooser(share, "Teilen via"));
}
我的错误在哪里?我在 logcat 中没有收到任何错误,但我无法共享 "screenshot"。
首先,你应该使用:
share.putExtra(Intent.EXTRA_STREAM. Uri.fromFile(new File(getApplicationContext().getFilesDir().getPath().toString() + "/screenshot.png"));
但是你会得到 "Permission denied for the attachment" 你可能会尝试但没有运气:(
share.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
所以处理这个问题的最好方法可能是将捕获的屏幕截图存储在媒体库中,然后从那里发送文件。
public void share() {
String filePath=getApplicationContext().getFilesDir().getPath().toString() + "/screenshot.png";
String path;
try {
path = Images.Media.insertImage(getContentResolver(), filePath, "title", null);
Uri screenshotUri = Uri.parse(path);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/png");
share.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
share.putExtra(Intent.EXTRA_STREAM, screenshotUri);
startActivity(Intent.createChooser(share, "Teilen via"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
希望对您有所帮助!