当用户尝试使用 whatsapp 共享图像时,我一直在尝试构建一个显示为可选图像源的应用程序。到目前为止,我已经设法让我的应用程序显示在 whatsapp 使用意图过滤器启动的服务选择器中,但我无法让图像正确返回到 whatsapp。我在下面发布我的代码:
public void returnImage(View v){
//Bitmap img;
//Bundle selectedImage = new Bundle();
Uri imageURI;
Intent shareIntent = new Intent();
switch(v.getId()){
case R.id.eric1 :
imageURI = saveToCache(R.drawable.cartman1);
shareIntent.putExtra(Intent.EXTRA_STREAM, imageURI);
shareIntent.setType("image/png");
setResult(RESULT_OK, shareIntent);
Utils.makeToast("Selected",this);
System.out.println("--------------------------------");
System.out.println(imageURI.toString());
finish();
}
}
private Uri saveToCache(int resID) {
// TODO Auto-generated method stub
Bitmap image = BitmapFactory.decodeResource(getResources(), resID);
File imageFile;
Date d = new Date();
String imgName = ((Long.toString(d.getTime())).subSequence(1,
9)).toString();
String state = Environment.getExternalStorageState();
printDebug(state);
if (Environment.MEDIA_MOUNTED.equals(state)) {
File file = getExternalFilesDir(null);
if (file != null) {
try {
//String root = file.getAbsolutePath();
imageFile = new File(file, imgName+".png");
printDebug(imageFile.getAbsolutePath());
FileOutputStream stream = new FileOutputStream(imageFile);
boolean complete = image.compress(Bitmap.CompressFormat.PNG, 100,
stream);
if (!complete) {
Log.d("tag", "image not saved");
}
Log.d("tag", "image saved");
// Tell the media scanner about the new file so that it is
// immediately available to the user.
MediaScannerConnection.scanFile(this,
new String[] { imageFile.toString() }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
return Uri.parse(imageFile.getAbsolutePath());
} catch (IOException e) {
Log.d("tag", "Can't save image", e);
}
}
}
return null;
}
该应用程序打开,我选择了图像,但 whatsapp 报告该图像无法共享。LogCat 不显示任何错误或警告。
我阅读了 Whatsapp 的资源 Intent-Filter -> 共享图像
但是没有提及应用程序返回的方式或内容,所以我在这里完全不知所措。