2012-03-06 101 views
12

我正尝试使用内置图库获取图像。它在模拟器中工作正常,它只打开画廊,但在真实的设备上,它给了我多个选择其中之一是文件管理器,使我可以选择任何类型的文件甚至apk文件当然应用程序崩溃之后 我有这个代码Android只从图库中获取图像

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 


    if (resultCode == RESULT_OK) { 


    switch(requestCode){  

     case SELECT_PICTURE: 
       Uri selectedImageUri = data.getData(); 


      break; 
     } 
     } 

}

+0

卸载文件管理器,因为它显然是一件垃圾。这就是说,StackOverflow是用于编程的问题,这不是一个问题。 – CommonsWare 2012-03-06 14:18:40

+1

对我来说似乎他的问题是“我如何让用户使用意图选择使用画廊的照片。” – FoamyGuy 2012-03-06 14:45:08

回答

24

尝试使用

.... 
    Intent intent = new Intent(Intent.ACTION_PICK); 
    intent.setType("image/*"); 
    startActivityForResult(intent, SELECT_PICTURE); 
.... 
+1

感谢这非常有帮助 – mrl25 2012-03-06 15:05:20

+2

股票Android 4.4的照片应用程序没有考虑到这一点。 – 2014-05-15 08:05:38

+0

唯一的rigwe answeir。我搜索了很多时间 - 我的错误是设置intent.setAction(Intent.ACTION_GET_CONTENT);许多机器人为我提供了选择从这样的应用程序中选择,如谷歌驱动器,viber photoes,但我无法解析uri。谢谢你的回答,确保所有标准画廊都应该正确处理这个问题(我检查了4部手机) – 2015-12-17 13:55:58

1

尝试使用此为您的意图:

Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE); 

如果你想始终使用股票库应用我不要认为你需要使用一个Intent选配所以你可能可以将您的startActivity改成这样:

startActivityForResult(intent, SELECT_PICTURE); 
5
public void ChoosePicture(View v) { 
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
    photoPickerIntent.setType("image/*"); 
    startActivityForResult(photoPickerIntent, 1); 
} 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 
    case 1: 
    { 
     if (resultCode == RESULT_OK) 
     { 
     Uri photoUri = data.getData(); 
     if (photoUri != null) 
     { 
     try { 
       String[] filePathColumn = {MediaStore.Images.Media.DATA}; 
       Cursor cursor = getContentResolver().query(photoUri, filePathColumn, null, null, null); 
       cursor.moveToFirst(); 
       int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
       String filePath = cursor.getString(columnIndex); 
       cursor.close(); 
       bMap_image = BitmapFactory.decodeFile(filePath); 
       ImageView img = (ImageView) findViewById(R.id.gallery1); 
       img.setImageBitmap(bMap_image); 


    }catch(Exception e) 
     {} 
     } 
    }// resultCode 
    }// case 1 
    }// switch, request code 
}// public void onActivityResult 

MMH,不知何故它改变了我最后几个“}”的位置。

此代码将让你从图库中选择一个图像,然后在imageview上显示它。

我在设备上使用此代码,并且像魅力一样工作。