Pertanyaan Unduh gambar dari Aplikasi Google+ baru (plus) Foto


Baru-baru ini Google menambahkan aplikasi Foto untuk Google+ (plus) dan itu muncul ketika Anda meluncurkan Intent untuk memilih gambar. Namun, jika saya memilih gambar dari Google+ Foto dan mencoba menggunakannya dalam aplikasi saya, tidak satu pun dari logika saya saat ini dapat mengembalikan URI atau URL yang dapat digunakan untuk benar-benar mendapatkan gambar yang dapat saya unduh dan manipulasi. Saat ini saya menggunakan metode "umum" untuk mencoba memanipulasi URI yang dapat ditemukan di sini di Stack Overflow dan di tempat lain. Saya dapat memberikan kode jika diperlukan, tetapi pada titik ini saya pikir itu agak tidak relevan karena berfungsi dengan baik untuk semua hal lain kecuali aplikasi baru ini. Ada gagasan tentang cara mendapatkan gambar yang dapat digunakan?

URI terlihat seperti berikut:

content://com.google.android.apps.photos.content/0/https%3A%2F%2Flh5.googleusercontent.com%<a bunch of letters and numbers here>

Itu MediaColumns.DATA info selalu mengembalikan null dan MediaColumns.DISPLAY_NAME selalu mengembalikan image.jpg tidak peduli apa yang saya pilih dari aplikasi Google Foto. Jika saya mencoba untuk menempel semuanya dari https ke akhir di browser saya, tidak ada yang muncul. Tidak yakin bagaimana cara mendapatkan info yang berguna dari ini.


32
2017-11-06 07:01


asal


Jawaban:


Saat menerima maksud data, Anda harus menggunakan contentResolver untuk mendapatkan foto. Inilah yang harus Anda lakukan:

String url = intent.getData().toString();
Bitmap bitmap = null;
InputStream is = null;
if (url.startsWith("content://com.google.android.apps.photos.content")){
       is = getContentResolver().openInputStream(Uri.parse(url));
       bitmap = BitmapFactory.decodeStream(is);
}

32
2017-11-07 12:11



Saya menghadapi masalah saat memilih gambar dari aplikasi Google Foto baru. Saya bisa mengatasinya dengan kode di bawah ini.

Ini bekerja untuk saya, pada dasarnya apa yang saya lakukan adalah saya memeriksa apakah ada wewenang apakah ada atau tidak di URI konten. Jika ada saya menulis ke file sementara dan mengembalikan jalur gambar sementara itu. Anda dapat melewati bagian kompresi saat menulis ke gambar sementara

public static String getImageUrlWithAuthority(Context context, Uri uri) {
    InputStream is = null;
    if (uri.getAuthority() != null) {
        try {
            is = context.getContentResolver().openInputStream(uri);
            Bitmap bmp = BitmapFactory.decodeStream(is);
            return writeToTempImageAndGetPathUri(context, bmp).toString();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return null;
}

public static Uri writeToTempImageAndGetPathUri(Context inContext, Bitmap inImage) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
    return Uri.parse(path);
}

P.S. : Saya telah menjawab a pertanyaan serupa di sini 


1
2018-06-24 07:07



Anda harus menggunakan proyeksi untuk mendapatkan ImageColumns.DATA (atau MediaColumns.DATA):

private String getRealPathFromURI(Uri contentURI) {
    // Projection makes ContentResolver to get needed columns only 
    String[] medData = { MediaStore.Images.Media.DATA };
    Cursor cursor = getContentResolver().query(contentURI, medData, null, null, null);

    // this is how you can simply get Bitmap
    Bitmap bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), contentURI);

    // After using projection cursor will have needed DATA column
    cursor.moveToFirst();
    final int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 

    return cursor.getString(idx);
}

0
2017-10-02 10:35