Поделитесь скриншотом из внутренней памяти андроида

Я хочу поделиться снимком экрана, который хранится во внутренней памяти, но все, что я получаю, — это пустой экран. Я узнал, что другое приложение не может использовать личные данные выигранного приложения. Это код, который я использовал для сохранения изображения:

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

Теперь, как я могу убедиться, что скриншот доступен и доступен для обмена.


person Reaching-Out    schedule 30.06.2016    source источник


Ответы (2)


Вы получаете 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 изображения и получите полный путь к изображению

person Sachin    schedule 30.06.2016
comment
Я реализовал ваш код и отредактировал свой код выше. Теперь, когда я запускаю код, приложение вылетает. Где я ошибаюсь? - person Reaching-Out; 30.06.2016
comment
что такое исключение? - person Sachin; 30.06.2016
comment
Это то, что я получаю java.lang.NullPointerException: попытка вызвать метод интерфейса 'boolean android.database.Cursor.moveToFirst()' для нулевой ссылки на объект - person Reaching-Out; 30.06.2016

Я решил это, экспортировав изображение во внешнее хранилище, а затем поделившись им.

 String url = null;
    try {
        url = MediaStore.Images.Media.insertImage(getContentResolver(), path.getAbsolutePath(), path.getName(), path.getName());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    Uri uri = Uri.parse(url);
person Reaching-Out    schedule 30.06.2016