当我使用 appcompat-v7 版本 23.0.0 或更高版本(用于工具栏)时,我无法在设备内存上创建目录

When I use appcompat-v7 version 23.0.0 or newer (for toolbars), I can not make a directory on the device memory

这是我的 gradle 文件

apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"

defaultConfig {
    applicationId "com.hoffmanfam.breakerpanel"
    minSdkVersion 11
    targetSdkVersion 23
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}
}

dependencies {
compile 'com.android.support:support-v7:23.2.1'
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:cardview-v7:23.2.1'
compile files('libs/json_simple-1.1.jar')
compile files('libs/dropbox-android-sdk.jar')
compile files('libs/itextpdf-5.2.1.jar')
}

这是最新可用的数字。我用它在我的 MainActivity 中的设备内存上创建一个目录。我已经删除了我的应用程序中除此之外的所有其他代码。

File direct = new File(Environment.getExternalStorageDirectory() + "/BreakerPanel");
    if(!direct.exists())
    {
        if(!direct.mkdir())
        {
            Toast.makeText(MainActivity.this, "Failed to create directory: BreakerPanel", Toast.LENGTH_LONG).show();
        }
    }

如果我使用 SDK 版本 22 和 appcompat-v7:22.0.0(或任何低于 23 的版本),一切正常,目录已创建。但是,对于版本 23,无法创建该目录。我每次都得到 Toast "failed to create directory: BreakerPanel"。我决定只在版本 22 上制作我的应用程序 运行,因为它一切正常,但我使用 SDK 版本 23 向 Google Play 商店发布了测试版(我在此更新期间添加了应用程序内购买) .显然,一旦您发布了 APK,就无法从版本 23 降级到版本 22,即使它是测试版。除了上面的目录创建步骤之外,我已经从我的应用程序中删除了所有其他代码,除非我使用 SDK 版本 22 或更低版本,否则它不会这样做。

您必须在 Api 23 之后专门请求权限。

http://developer.android.com/training/permissions/requesting.html

您没有这样做,因此没有写入外部存储文件夹的权限。

这与 AppCompat 无关。是因为你的目标SDK。