我在应用之间在android上共享内容时遇到问题,有了Intent,我就可以成功共享纯文本(在G +,Facebook和Facebook Messenger上),代码如下:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT,"Your score is: "+Integer.toString(mScore));
shareIntent.setType("text/plain");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));
但是,当涉及到图像时,一切都不起作用。目的是创建和我可以在应用程序之间实际选择共享与图像,但是当所选择的应用程序会尝试启动,它只是崩溃和无法打开。没有应用程序有效(已通过9Gag,G +,Facebook,Facebook Messenger,Photos ..测试)。我正在使用的代码是:
Intent shareIntent = new Intent();
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent.setType("image/png");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));
图像存储在/data/data/com.test.carloalberto.myapp/files/score.png上,这是我之前保存图像的正确路径。
尝试共享图像时,为什么其他应用程序会崩溃?
感谢您的回复。
编辑:我将图像存储在公共图片目录中,但是尝试共享图像的fb Messenger等应用仍然崩溃!
这是新代码:
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
String name = "score.jpg";
File file = new File(dir,name);
FileOutputStream ostream;
try {
if(!dir.exists()) {
Log.i("Share: onClick()","Creating directory "+dir);
dir.mkdirs();
}
Log.i("Share: onClick()","Final path: "+file.getAbsolutePath());
file.createNewFile();
ostream = new FileOutputStream(file);
Log.i("onClick(): Share action: ","Path: "+file.getAbsolutePath());
bitmap.compress(Bitmap.CompressFormat.JPEG,100,ostream);
ostream.close();
Uri uriToImage = Uri.parse(file.getAbsolutePath());
Log.i("onClick(): Share action, final uri ",uriToImage.toString());
Intent shareIntent = new Intent();
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent,getResources().getText(R.string.send_to)));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
现在,文件路径为:/mnt/sdcard/Pictures/score.jpg,该路径应该是公共的,并且所有其他应用程序都可以访问。(显然,我也在清单文件中设置了权限)
/data/*
路径不适用于应用程序(每个* nix用户都应了解的文件系统安全模型)。
您能够在已root用户的设备上访问此文件夹的事实并不意味着该应用程序可以执行相同操作。
您可以将图像存储在公共可用目录(例如设备的Pictures文件夹等)中,也可以尝试使用以下方案为您的资产构造URI:
android.resource://[package]/[res type]/[res name]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句