динамически добавлять картинки в виджет галереи - PullRequest
7 голосов
/ 11 ноября 2010

Есть ли хороший способ добавить новые ресурсы изображений (с SD-карты) в виджет галереи во время выполнения?

Ответы [ 2 ]

25 голосов
/ 11 ноября 2010

"новые ресурсы изображений"?

Ресурсы изображений являются частью папки / res / drawable внутри вашего пакета приложения .apk. Вы не можете добавлять "новые" ресурсы изображения во время выполнения.

Есть ли какой-то другой вариант использования, который вы имели в виду?

Отредактировано после объяснения плакатов:

Вы должны добавить медиа-файлы в Media Store, чтобы их можно было увидеть в виджете галереи. Используйте MediaScanner. Я использую эту удобную оболочку в своем коде:

public class MediaScannerWrapper implements  
MediaScannerConnection.MediaScannerConnectionClient {
    private MediaScannerConnection mConnection;
    private String mPath;
    private String mMimeType;

    // filePath - where to scan; 
    // mime type of media to scan i.e. "image/jpeg". 
    // use "*/*" for any media
    public MediaScannerWrapper(Context ctx, String filePath, String mime){
        mPath = filePath;
        mMimeType = mime;
        mConnection = new MediaScannerConnection(ctx, this);
    }

    // do the scanning
    public void scan() {
        mConnection.connect();
    }

    // start the scan when scanner is ready
    public void onMediaScannerConnected() {
        mConnection.scanFile(mPath, mMimeType);
        Log.w("MediaScannerWrapper", "media file scanned: " + mPath);
    }

    public void onScanCompleted(String path, Uri uri) {
        // when scan is completes, update media file tags
    }
}

Затем создайте экземпляр MediaScannerWrapper и начните его с scan(). Вы можете настроить его для обработки более одного файла одновременно. Подсказка: передайте список путей к файлам, а затем выполните цикл вокруг mConnection.scanFile.

1 голос
/ 06 июля 2015

Отправить трансляцию на MediaStore Content Provider при добавлении файла

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(imageAdded)));

Работа для устройств до KitKat

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
              Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

Также взгляните на это

Работает в Lolipop и также должен решить проблемы с Kitkat.

ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA,"file path");
values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpeg");
mContext.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);

Добавить разрешение.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...