如何在选择文档时从外部SD卡获取路径?

时间:2016-05-30 10:53:47

标签: android android-activity android-file android-external-storage

您好我是android的新手,我正在制作一个应用程序,我可以从SD卡中选择文档并获取该文档的路径。我按照this教程。并且能够从内部存储器获取文件路径但不幸的是我无法从SD卡获取路径。

活动

public class Buttona extends Activity {
    private static final int MY_INTENT_CLICK=302;
    String selectedFilePath;
    TextView texta;
    Context mContext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.buttona);
    }

    // Start the service
    public void startService(View view) {

            if (Build.VERSION.SDK_INT < 19) {
                Intent intent = new Intent();
                intent.setType("*/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent, "Select File"), MY_INTENT_CLICK);
            } else {
                Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("*/*");
                startActivityForResult(intent, MY_INTENT_CLICK);
            }

    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (resultCode == RESULT_OK)
        {
            if (requestCode == MY_INTENT_CLICK)
            {
                try {
                    if (data != null) {

                        Uri uri = data.getData();

                        String filePath = getPath(mContext, uri);
                        String fileName = getFileName(data, mContext);



                        Log.e("TAG", filePath);
                        Log.e("TAG", fileName);




                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static String getFileName(Intent data,Context context){

        Uri uri = data.getData();
        String uriString = uri.toString();
        File myFile = new File(uriString);
        String path = myFile.getAbsolutePath();
        String displayName = null;

        if (uriString.startsWith("content://")) {
            Cursor cursor = null;
            try {
                cursor =context. getContentResolver().query(uri, null, null, null, null);
                if (cursor != null && cursor.moveToFirst()) {
                    displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
                }
            } finally {
                cursor.close();
            }
        } else if (uriString.startsWith("file://")) {
            displayName = myFile.getName();
        }


        return  displayName;
    }

//get file path

    public static String getPath(Context context, Uri uri) throws URISyntaxException {
        if ("content".equalsIgnoreCase(uri.getScheme())) {
            String[] projection = { "_data" };
            Cursor cursor = null;

            try {
                cursor = context.getContentResolver().query(uri, projection, null, null, null);
                int column_index = cursor.getColumnIndexOrThrow("_data");
                if (cursor.moveToFirst()) {
                    return cursor.getString(column_index);
                }
            } catch (Exception e) {
                // Eat it
            }
        }
        else if ("file".equalsIgnoreCase(uri.getScheme())) {
            return uri.getPath();
        }

        return null;
    }

    // Stop the service
    public void stopService(View view) {
        stopService(new Intent(this, MyService.class));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

}

1 个答案:

答案 0 :(得分:-1)

         try {
                if (data != null) {

                    Uri uri = data.getData();

                    String filePath = getPath(mContext, uri);
                    String fileName = getFileName(data, mContext);



                    Log.e("TAG", filePath);
                    Log.e("TAG", fileName);




                }
            } catch (Exception e) {
                e.printStackTrace();
            }

获取文件路径和文件名

   //get file name
public static String getFileName(Intent data,Context context){

    Uri uri = data.getData();
    String uriString = uri.toString();
    File myFile = new File(uriString);
    String path = myFile.getAbsolutePath();
    String displayName = null;

    if (uriString.startsWith("content://")) {
        Cursor cursor = null;
        try {
            cursor =context. getContentResolver().query(uri, null, null, null, null);
            if (cursor != null && cursor.moveToFirst()) {
                displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
            }
        } finally {
            cursor.close();
        }
    } else if (uriString.startsWith("file://")) {
        displayName = myFile.getName();
    }


    return  displayName;
}

//get file path

public static String getPath(Context context, Uri uri) throws URISyntaxException {
    if ("content".equalsIgnoreCase(uri.getScheme())) {
        String[] projection = { "_data" };
        Cursor cursor = null;

        try {
            cursor = context.getContentResolver().query(uri, projection, null, null, null);
            int column_index = cursor.getColumnIndexOrThrow("_data");
            if (cursor.moveToFirst()) {
                return cursor.getString(column_index);
            }
        } catch (Exception e) {
            // Eat it
        }
    }
    else if ("file".equalsIgnoreCase(uri.getScheme())) {
        return uri.getPath();
    }

    return null;
}