Почему мой путь к картинке: /mnt/sdcard вместо /sdcard/?
В моем приложении я открываю галерею Android по умолчанию для выбора и изображения. Результатом является путь.
Когда я тестирую приложение в своем телефоне, путь /mnt/sdcard/picturename
но когда я проверяю это в телефоне моего коллеги, путь /sdcard/picturename
Это вызывает проблему, потому что позже в моем коде я использую метод подстроки для сбора только имени изображения. и это дает разные результаты в зависимости от того, содержит ли путь /mnt/ или нет!
Вы знаете, как мы можем получить путь, начиная с /sdcard/ ...
??
вот код, который я использовал для открытия галереи:
photo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cheminNouvellePhoto.setText("/sdcard/images/..");
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(
Intent.createChooser(intent, "Select Picture"), 101);
}
});
и код, который возвращает путь:
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
3 ответа
Вы не должны жестко кодировать этот путь в своем приложении, вы можете использовать следующий код, чтобы получить правильный путь на каждом устройстве:
Environment.getExternalStorageDirectory()
Если вам нужно получить имя фотографии, вы можете получить его, когда получите результат выбора фотографии, вот начало функции, которую вы можете использовать:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RateDayApplication.SELECT_PICTURE_DIALOG_ID) {
if (resultCode == getActivity().RESULT_OK) {
//get Uri from the intent
Uri selectedImageUri = data.getData();
//get the image path
String selectedImagePath = getPath(selectedImageUri);
if(selectedImagePath!=null) {
//get the image selected
File photoSelected = new File(selectedImagePath);
//get the name of the image
String photoNameString = photoSelected.getName();
Вы должны получить доступ к изображениям во внешнем хранилище, используя это Environment.getExternalStorageDirectory()
так как URL может отличаться от устройства к устройству.
Я думаю, что это связано с некоторыми устройствами, имеющими встроенную SD-карту, а с другими, имеющими настоящую SD-карту в слоте, путь к внешнему хранилищу может быть разным. Вы не должны работать с абсолютными путями в любом случае, проверьте этот вопрос о том, как получить путь к внешнему хранилищу.