0

在我的应用程序中,我打开 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);
    }
4

3 回答 3

0

您应该使用它访问外部存储中的图片,Environment.getExternalStorageDirectory()因为 URL 可能因设备而异。

于 2013-05-07T15:20:34.977 回答
0

您不应该在您的应用程序中硬编码此路径,您可以使用以下代码在每台设备上获取正确的路径:

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();
于 2013-05-07T15:20:40.150 回答
0

我认为这与某些具有内置“sd 卡”的设备和其他在插槽中具有真正的 sd 卡的设备有关,外部存储的路径各不相同。无论如何,您都不应该使用绝对路径,请查看有关如何获取外部存储路径的问题。

于 2013-05-07T15:21:57.230 回答