2012-01-09 6 views
7

Я хочу получить фотографии из встроенной галереи Android, вызывающей ACTION_PICK Intent. У меня проблема с изображениями Picasa. Я использовал код для этого link, но он не работает (объект File не существует). Любая идея, пожалуйста.Android Как получить фотографию picasa из встроенной галереи?

ответ

0

код работает, если это вставить эту инструкцию:

intent.putExtra("crop", "true"); 
0
  • запуск ACTION_GET_CONTENT намерения вместо ACTION _PICK
  • обеспечивает MediaStore.EXTRA_OUTPUT дополнительные с URI для временного файла.

Добавьте это в вызывающей деятельность:

Файл yourFile;

Теперь используйте этот code to get Intent:

yourFile = getFileStreamPath("yourTempFile"); 
yourFile.getParentFile().mkdirs(); 
Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT, null); 
galleryIntent .setType("image/*"); 
galleryIntent .putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(yourFile)); 
galleryIntent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.name()); 
startActivityForResult(galleryIntent, GALLERY_PIC_REQUEST); 

УБЕДИСЬ yourFile создаются

Также в вашем вызывающей деятельности

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch(requestCode){ 
    case GALLERY_PIC_REQUEST: 
     File file = null; 
     Uri imageUri = data.getData(); 
     if (imageUri == null || imageUri.toString().length() == 0) { 
      imageUri = Uri.fromFile(mTempFile); 
      file = mTempFile; 
      //this is the file you need! Check it 
     } 
     //if the file did not work we try alternative method 
     if (file == null) { 
      if (requestCode == 101 && data != null) { 
       Uri selectedImageUri = data.getData(); 
       String selectedImagePath = getPath(selectedImageUri); 
       //check this string to extract picasa id 
      } 
     } 
    break; 
    } 
} 

public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    if(cursor!=null) 
    { 
     int index = cursor 
     .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(index); 
    } 
    else return null; 
} 
+0

mTempFile файл всегда пуст. –

+1

это не работает, если изображение находится в picasa .. –

5

ACTIVITYRESULT_CHOOSEPICTURE является ИНТОМ использовать при вызове startActivity (Интен t, requestCode);

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == ACTIVITYRESULT_CHOOSEPICTURE) { 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    final InputStream is = context.getContentResolver().openInputStream(intent.getData()); 
    final Bitmap bitmap = BitmapFactory.decodeStream(is, null, options); 
    is.close(); 
    } 
} 
+0

спасибо за это, он отлично работает, даже когда изображение происходит от пикасы. Не забудьте сделать этот код в потоке, так как он может загружать контент из сети. –

0

Используйте этот код

final Uri tempUri = data.getData(); 
        Uri imageUri = null; 
        final InputStream imageStream; 
        try { 
         imageStream = getActivity().getContentResolver().openInputStream(tempUri); 
         Bitmap selectedImage = BitmapFactory.decodeStream(imageStream); 
         imageUri = getImageUri(getActivity(), selectedImage); 
        } catch (FileNotFoundException e) { 
         e.printStackTrace(); 
        } 


public Uri getImageUri(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); 
    } 
Смежные вопросы