Почему мой путь к картинке: /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-карту в слоте, путь к внешнему хранилищу может быть разным. Вы не должны работать с абсолютными путями в любом случае, проверьте этот вопрос о том, как получить путь к внешнему хранилищу.

Другие вопросы по тегам