0

内部ストレージに保存されているスクリーンショットを共有したいのですが、共有中に空白の画面しか表示されません。獲得したアプリのプライベートデータを別のアプリが使用できないことを知りました。これは、画像を保存するために使用したコードです:

File path = new File(getApplicationContext().getDir("Default", Context.MODE_ENABLE_WRITE_AHEAD_LOGGING),"myapp");
File directory = new File(path.getAbsolutePath());
directory.mkdirs();
String filename = "myapp.png";
File yourFile = new File(directory, filename);
try
{
 FileOutputStream out = new FileOutputStream(yourFile, true);
 bitmap.compress(Bitmap.CompressFormat.PNG, 90,out);
 out.flush();
 out.close();
 send(yourFile);
}catch (IOException e)
{
 e.printStackTrace();
}

共有の意図は次のとおりです。

public void send(File path)
{
    Uri uri = Uri.fromFile(path);
    Log.d("uri", String.valueOf(path));
    Intent shareIntent = new Intent();
    shareIntent.setAction(Intent.ACTION_SEND);
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, "My App");
    shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
    shareIntent.setType("image/*");
    shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    startActivity(Intent.createChooser(shareIntent, "Share via"));
}

画像が保存されるパスとパスの値は次のとおりです。

/data/user/0/com.sample.myapp/app_Default/myapp/myapp.png

スクリーンショットにアクセスして共有できるようにするにはどうすればよいでしょうか。

4

2 に答える 2

0

Real Image パスではなく、画像 URI を取得しています

実際のパスを取得するには、これを確認してください

public String getRealPathFromURI(Uri uri) {
    Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
    cursor.moveToFirst(); 
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    return cursor.getString(idx); 
}

この画像URIを渡すだけで、完全な画像パスを取得できます

于 2016-06-30T10:18:42.490 に答える