«Отказано в доступе» при попытке обработать намерение «Поделиться изображением» из браузера в моей собственной деятельности - PullRequest
3 голосов
/ 10 января 2012

Я пытаюсь написать простое упражнение, которое выполняет следующее: Пользователь удерживает изображение, просматриваемое в браузере Android, а затем нажимает «Поделиться изображением» и выбирает мою активность для его обработки. Я хочу иметь возможность открыть файл изображения из моей деятельности.

Путь к файлу заканчивается: /data/data/com.android.browser/app_sharedimage/SOME_FILE_NAME.jpg и вызов «File ()» на пути приводит к ошибке разрешения: java.io.FileNotFoundException: /data/data/com.android.browser/app_sharedimage/SOME_FILE_NAME.jpg (В доступе отказано))

Как я могу открыть этот файл изображения? Есть ли какое-то разрешение, которое мне нужно добавить в манифест?

Вот соответствующий код:

        if (Intent.ACTION_SEND.equals(intent.getAction())) {
            if (extras.containsKey(Intent.EXTRA_STREAM)) {
                Uri uri = (Uri) extras.getParcelable(Intent.EXTRA_STREAM);

                String scheme = uri.getScheme();
                if (scheme.equals("content")) {
                    String mimeType = intent.getType();
                    ContentResolver contentResolver = getContentResolver();
                    Cursor cursor = contentResolver.query(uri, null, null,
                            null, null);
                    cursor.moveToFirst();
                    String filePath = cursor.getString(cursor
                            .getColumnIndexOrThrow(Images.Media.DATA));
                    ...
                    ...
                    new FileBody(new File(filePath)) 
                    ...

Ответы [ 2 ]

1 голос
/ 10 января 2012

AFAIK, вы не сможете получить доступ к личным файлам любых других приложений, если ваш телефон не рутирован.Поэтому я думаю, что вы не сможете открыть изображение.

0 голосов
/ 13 мая 2012

Я могу отобразить (я полагаю, это то, что вы имеете в виду, открыв) изображение из браузера на HTC Desire, и оно не рутировано.

Я использую URI, как и вы, из дополнений вНамерение.Затем я получаю InputStream и создаю из него Drawable, которое можно отобразить в ImageView.

Получаемый URI:

content: // htcbrowser / share_image / data/data/com.android.browser/app_sharedimage/logo3w.png?image/png

if (intent.getType() != null && intent.getType().indexOf("image/") != -1) {
        Bundle extras = intent.getExtras();
         if (extras.containsKey(Intent.EXTRA_STREAM)) {
            Uri uri = (Uri) extras.getParcelable(Intent.EXTRA_STREAM);
            ImageView iv = (ImageView) findViewById(R.id.imageView1);
            try {
                InputStream is = getContentResolver().openInputStream(uri);
                Drawable myDrawable = Drawable.createFromStream(is, "srcName");
                iv.setImageDrawable(myDrawable);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
...