在“文件选择器”中访问外部存储

时间:2015-03-31 08:01:49

标签: android android-activity android-permissions android-external-storage filepicker

我正在尝试实现文件选择器。我在我的应用中使用Android File Explore进行文件选择器。当我运行应用程序时,它会显示内部存储并返回文件路径,但它根本不显示外部存储。

这是我的AndroidManifest.xml文件。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unicloud.mittal" >

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:logo="@drawable/ic_launcher"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <activity
            android:name=".Splash"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".loginWithGooglePlus"
            android:label="@string/app_name"
            android:logo="@drawable/ic_launcher" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".FileExplore"
            android:label="Pick a file"
            android:permission="android.permission.MANAGE_DOCUMENTS" >
            <intent-filter>
                <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
            </intent-filter>

        </activity>
    </application>

</manifest>

我做错了什么?

1 个答案:

答案 0 :(得分:3)

在上面的github链接中,您正在使用Environment.getExternalStorageDirectory() API,它正在按预期工作。我想你误解了这个API的使用。此API将始终返回主外部存储目录。以下说明可能对您有所帮助:

首先,内部存储,外部存储(又称主外部存储)和辅助外部存储有什么区别?

内部存储是用户无法访问的存储,除非是已安装的应用(或通过生根设备)。示例:data / data / app_packageName

主要外部存储:在内置的共享存储中,用户可以通过插入USB电缆并将其作为驱动器安装在主机上进行访问&#34;。示例:当我们说Nexus 5 32 GB。

辅助外部存储:可移动存储。示例:SD卡。

现在下一个问题。如何在Lollipop中访问SD卡? 要访问SD卡,Android在KitKat中引入了新的Storage Access Framework

以下是一个很好地解释的答案:https://stackoverflow.com/a/26765884/631803