2016-07-14 4 views
0

Я пишу этот код, и мой код выбирает одно изображение из галереи и получает данные от него, но я не знаю, как получить адрес изображения от Inputstrem или данных и сохранить его?Как получить адрес из галереи в android

public void loadPic() 
{ 
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
    photoPickerIntent.setType("image/*"); 
    startActivityForResult(photoPickerIntent, 1); 
} 

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

    if(requestCode==1) 
    { 
     try { 
      Uri selectedImage=data.getData(); 
      InputStream inputStream = getContentResolver().openInputStream(selectedImage); 
      listItems.add(inputStream.toString()); 
     } catch (FileNotFoundException e) { 

      e.printStackTrace(); 
     } 
    } 
} 
+0

Зачем вам нужен путь к изображению, выбранному из галереи? Вы можете делать все, что хотите, с помощью 'InputStream', который вы получаете от Intent в обратном вызове' onActivityResult'. –

+0

использовать BitmapFactory для получения растрового изображения, соответственно bmp = BitmapFactory.decodeStream (inputStream); – prGD

+0

действительно !! Могу ли я скопировать его в другое место – Amir133

ответ

1

Прочтите имя файла, как показано ниже, используйте его соответствующим образом.

  Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      cursor.moveToFirst(); 
      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      File f = new File(picturePath); 
      String imageName = f.getName(); 
0

Я не уверен, если это именно то, что вы хотите, но вы можете получить изображение, как это:

Uri selectedImage = data.getData(); 
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), selectedImage); 

После того как вы Bitmap, вы можете увидеть here о том, как сохранить Это.

EDIT: Попробуйте это

 Uri selectedImage = data.getData(); 
     String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null); 
     cursor.moveToFirst(); 
     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     String picturePath = cursor.getString(columnIndex); 
     cursor.close(); 
     ImageView imageView = (ImageView) findViewById(R.id.imgView); 
     imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 

Взятые из here.

+0

Мне нужно сохранить адрес для следующего раза, что об этом? – Amir133

+0

Проверить править @ Amir133. Дайте мне знать, если это не сработает или вам нужна дополнительная помощь. –

0

Иногда вы не можете получить файл с выбранного вами изображения. Это потому, что выбранный из Google+, Диск, Dropbox или любого другого провайдера.

Лучшее решение - попросить систему выбрать контент через Intent.ACTION_GET_CONTENT и получить результат с помощью поставщика контента.

public void pickImage() { 
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.setType("image/*"); 
    startActivityForResult(intent, PICK_PHOTO_FOR_AVATAR); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == PICK_PHOTO_FOR_AVATAR && resultCode == Activity.RESULT_OK) { 
     if (data == null) { 
      //Display an error 
      return; 
     } 
     InputStream inputStream = context.getContentResolver().openInputStream(data.getData()); 
     //Now you can do whatever you want with your inpustream, save it as file, upload to a server, decode a bitmap... 
    } 
} 
+0

у вашего ответа есть проблема в «компиляторе», мы сказали, что у нас нет этого класса, и это изменение относится к «контексту», но когда оно показывает эту ошибку «Невозможно сделать статическую ссылку на нестатический метод getContentResolver() из типа Context" – Amir133

Смежные вопросы