﻿{"id":759,"date":"2021-10-20T21:14:57","date_gmt":"2021-10-20T13:14:57","guid":{"rendered":"http:\/\/blog.sway.com.cn\/?p=759"},"modified":"2021-12-02T15:16:00","modified_gmt":"2021-12-02T07:16:00","slug":"android%e8%b0%83%e7%94%a8%e5%8e%9f%e7%94%9f%e6%96%87%e4%bb%b6%e7%ae%a1%e7%90%86%e5%99%a8%e6%9d%a5%e9%80%89%e6%8b%a9%e6%96%87%e4%bb%b6","status":"publish","type":"post","link":"http:\/\/blog.sway.com.cn\/?p=759","title":{"rendered":"Android\u8c03\u7528\u539f\u751f\u6587\u4ef6\u7ba1\u7406\u5668\u6765\u9009\u62e9\u6587\u4ef6"},"content":{"rendered":"<p>\u5728activity\u5373\u53ef:<\/p>\n<pre class=\"lang:default decode:true \">public class UploadActivity  extends Activity {\r\n\r\n    public final static int REQUEST_CODE = 1000;\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n\r\n        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);\r\n        intent.setType(\"*\/*\"); \/\/\u8bbe\u7f6e\u7c7b\u578b\uff0c\u4efb\u610f\u7c7b\u578b\r\n        intent.addCategory(Intent.CATEGORY_OPENABLE);\r\n\r\n        this.startActivityForResult(intent, REQUEST_CODE);\r\n    }\r\n\r\n    @Override\r\n    protected void onActivityResult(int requestCode, int resultCode, Intent data) {\r\n        super.onActivityResult(requestCode, resultCode, data);\r\n        \/\/if (requestCode == REQUEST_CODE &amp;&amp; resultCode == 200) {\r\n        if (data == null) {\r\n            \/\/ \u7528\u6237\u672a\u9009\u62e9\u4efb\u4f55\u6587\u4ef6\uff0c\u76f4\u63a5\u8fd4\u56de\r\n            return;\r\n        }\r\n\r\n        Uri uri = data.getData(); \/\/ \u83b7\u53d6\u7528\u6237\u9009\u62e9\u6587\u4ef6\u7684URI\r\n\r\n        String path =  uri.getPath();\r\n        Toast.makeText(this, \"path=\"+path, Toast.LENGTH_SHORT).show();\r\n        \r\n        String truePath = this.getPath(this,uri);\r\n        Toast.makeText(this, \"truePath=\"+truePath, Toast.LENGTH_SHORT).show();\r\n\r\n        File file = new File(truePath);\r\n        Toast.makeText(this, \"file.exists()=\"+file.exists(), Toast.LENGTH_SHORT).show();\r\n\r\n        Intent intent = new Intent();\r\n        intent.putExtra(\"truePath\", truePath);\r\n        setResult(Activity.RESULT_OK, intent);\r\n        finish();\r\n\r\n    }\r\n\r\n    \/**\r\n     * \u4e13\u4e3aAndroid4.4\u8bbe\u8ba1\u7684\u4eceUri\u83b7\u53d6\u6587\u4ef6\u7edd\u5bf9\u8def\u5f84\uff0c\u4ee5\u524d\u7684\u65b9\u6cd5\u5df2\u4e0d\u597d\u4f7f\r\n     *\/\r\n    @SuppressLint(\"NewApi\")\r\n    public String getPath(final Context context, final Uri uri) {\r\n\r\n        final boolean isKitKat = Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.KITKAT;\r\n\r\n        \/\/ DocumentProvider\r\n        if (isKitKat &amp;&amp; DocumentsContract.isDocumentUri(context, uri)) {\r\n            \/\/ ExternalStorageProvider\r\n            if (isExternalStorageDocument(uri)) {\r\n                final String docId = DocumentsContract.getDocumentId(uri);\r\n                final String[] split = docId.split(\":\");\r\n                final String type = split[0];\r\n\r\n                if (\"primary\".equalsIgnoreCase(type)) {\r\n                    return Environment.getExternalStorageDirectory() + \"\/\" + split[1];\r\n                }\r\n            }\r\n            \/\/ DownloadsProvider\r\n            else if (isDownloadsDocument(uri)) {\r\n\r\n                final String id = DocumentsContract.getDocumentId(uri);\r\n                final Uri contentUri = ContentUris.withAppendedId(\r\n                        Uri.parse(\"content:\/\/downloads\/public_downloads\"), Long.valueOf(id));\r\n\r\n                return getDataColumn(context, contentUri, null, null);\r\n            }\r\n            \/\/ MediaProvider\r\n            else if (isMediaDocument(uri)) {\r\n                final String docId = DocumentsContract.getDocumentId(uri);\r\n                final String[] split = docId.split(\":\");\r\n                final String type = split[0];\r\n\r\n                Uri contentUri = null;\r\n                if (\"image\".equals(type)) {\r\n                    contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;\r\n                } else if (\"video\".equals(type)) {\r\n                    contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;\r\n                } else if (\"audio\".equals(type)) {\r\n                    contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;\r\n                } else if (\"document\".equals(type)) {\r\n                    contentUri = MediaStore.Files.getContentUri(\"external\");\r\n                }\r\n\r\n                final String selection = \"_id=?\";\r\n                final String[] selectionArgs = new String[]{split[1]};\r\n\r\n                return getDataColumn(context, contentUri, selection, selectionArgs);\r\n            }\r\n        }\r\n        \/\/ MediaStore (and general)\r\n        else if (\"content\".equalsIgnoreCase(uri.getScheme())) {\r\n            return getDataColumn(context, uri, null, null);\r\n        }\r\n        \/\/ File\r\n        else if (\"file\".equalsIgnoreCase(uri.getScheme())) {\r\n            return uri.getPath();\r\n        }\r\n        return null;\r\n    }\r\n\r\n    \/**\r\n     * Get the value of the data column for this Uri. This is useful for\r\n     * MediaStore Uris, and other file-based ContentProviders.\r\n     *\r\n     * @param context       The context.\r\n     * @param uri           The Uri to query.\r\n     * @param selection     (Optional) Filter used in the query.\r\n     * @param selectionArgs (Optional) Selection arguments used in the query.\r\n     * @return The value of the _data column, which is typically a file path.\r\n     *\/\r\n    public String getDataColumn(Context context, Uri uri, String selection,\r\n                                String[] selectionArgs) {\r\n\r\n        Cursor cursor = null;\r\n        final String column = \"_data\";\r\n        final String[] projection = {column};\r\n\r\n        try {\r\n            cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,\r\n                    null);\r\n            if (cursor != null &amp;&amp; cursor.moveToFirst()) {\r\n                final int column_index = cursor.getColumnIndexOrThrow(column);\r\n                return cursor.getString(column_index);\r\n            }\r\n        } finally {\r\n            if (cursor != null)\r\n                cursor.close();\r\n        }\r\n        return null;\r\n    }\r\n\r\n    \/**\r\n     * @param uri The Uri to check.\r\n     * @return Whether the Uri authority is ExternalStorageProvider.\r\n     *\/\r\n    public boolean isExternalStorageDocument(Uri uri) {\r\n        return \"com.android.externalstorage.documents\".equals(uri.getAuthority());\r\n    }\r\n\r\n    \/**\r\n     * @param uri The Uri to check.\r\n     * @return Whether the Uri authority is DownloadsProvider.\r\n     *\/\r\n    public boolean isDownloadsDocument(Uri uri) {\r\n        return \"com.android.providers.downloads.documents\".equals(uri.getAuthority());\r\n    }\r\n\r\n    \/**\r\n     * @param uri The Uri to check.\r\n     * @return Whether the Uri authority is MediaProvider.\r\n     *\/\r\n    public boolean isMediaDocument(Uri uri) {\r\n        return \"com.android.providers.media.documents\".equals(uri.getAuthority());\r\n    }\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>\u6ce8\u610f\uff1a\u8bf7\u8bb0\u5f97\u5f00\u542f\u6587\u4ef6\u8bfb\u5199\u6743\u9650\uff0c\u5426\u5219\u83b7\u53d6\u5230\u7684\u6587\u4ef6\u8def\u5f84\u4e3anull\uff1a<\/p>\n<pre class=\"\">&lt;uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"\/&gt;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5728activity\u5373\u53ef: public class UploadActivity extends Activi [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[222],"tags":[],"class_list":["post-759","post","type-post","status-publish","format-standard","hentry","category-android"],"_links":{"self":[{"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/759","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=759"}],"version-history":[{"count":3,"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/759\/revisions"}],"predecessor-version":[{"id":766,"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/759\/revisions\/766"}],"wp:attachment":[{"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=759"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=759"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.sway.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=759"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}