//Share image to all
share = (Button)findViewById(R.id.facebook_app_id);
share.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Uri imageUri = Uri.parse("android.resource://" + getPackageName() +"/drawable/"+imageRes);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_STREAM, imageUri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(intent , "Share"));
}
});
我正在尝试构建照片共享应用。 Facebook,Messenger,skype工作得很好,但 Whatsapp和Viber 显示错误(不支持文件格式) : - (
我是Android的初学者。我正在尝试很多,但没有工作。请帮忙。
答案 0 :(得分:1)
尝试将共享意图中的内容类型设置为 image / png 。 如上所述,这可能适用于所有应用程序,也可能不适用。
原因是您无法直接与应用程序内部存储共享uri(当然,应用程序的资源将始终位于内部存储中)
实现这一目标的方法有两种。
将图像复制到外部存储,然后从那里共享。看到此
编写内容提供商以共享图像。为此,请参阅从内部存储创建和共享文件
答案 1 :(得分:1)
以下是如何执行此操作的示例:
public void shareImageWhatsApp() {
Bitmap adv = BitmapFactory.decodeResource(getResources(), R.drawable.adv);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/jpeg");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
adv.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
File f = new File(Environment.getExternalStorageDirectory()
+ File.separator + "temporary_file.jpg");
try {
f.createNewFile();
new FileOutputStream(f).write(bytes.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
share.putExtra(Intent.EXTRA_STREAM,
Uri.parse( Environment.getExternalStorageDirectory()+ File.separator+"temporary_file.jpg"));
if(isPackageInstalled("com.whatsapp",this)){
share.setPackage("com.whatsapp");
startActivity(Intent.createChooser(share, "Share Image"));
}else{
Toast.makeText(getApplicationContext(), "Please Install Whatsapp", Toast.LENGTH_LONG).show();
}
}
private boolean isPackageInstalled(String packagename, Context context) {
PackageManager pm = context.getPackageManager();
try {
pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES);
return true;
} catch (NameNotFoundException e) {
return false;
}
}
答案 2 :(得分:0)
我不确定,但你可以检查一下 imageRes,扩展名为.jpeg或png 例如 android.resource://" + getPackageName()+" / drawable /" +" imageRes.jpg"
答案 3 :(得分:0)
试试这个:
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher_round);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
String path = MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, "ic_launcher_round", null);
Uri imageUri = Uri.parse(path);
intent.putExtra(Intent.EXTRA_STREAM, imageUri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(intent , "Share"));
在此代码执行之前确保您必须提供EXTERNAL_STORAGE权限并定位并编译高于lolipop的sdk然后您必须请求权限