Java 在Android 6.0中,如何在不请求运行时许可的情况下写入SD卡?

Java 在Android 6.0中,如何在不请求运行时许可的情况下写入SD卡?,java,android,Java,Android,我想问-应用程序是否可以在不询问运行时权限的情况下将数据写入Android 6.0中的外部SD卡?我知道正确的方法是检查用户是否为我的应用程序授予了这样的权限。我做了一个小调查,发现Google Play中的大多数文件管理员都要求这些权限。但是ES FileExplorer()-不要求这样的权限,可以用sd卡执行任何操作!有人知道他们是如何做到这一点的吗?谢谢你的帮助 这是我的毕业代码 android { buildToolsVersion '23.0.2' compileSdkVersion

我想问-应用程序是否可以在不询问运行时权限的情况下将数据写入Android 6.0中的外部SD卡?我知道正确的方法是检查用户是否为我的应用程序授予了这样的权限。我做了一个小调查,发现Google Play中的大多数文件管理员都要求这些权限。但是ES FileExplorer()-不要求这样的权限,可以用sd卡执行任何操作!有人知道他们是如何做到这一点的吗?谢谢你的帮助

这是我的毕业代码

android {
buildToolsVersion '23.0.2'
compileSdkVersion 22
sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
        jniLibs.srcDirs = ['libs']
    }

    instrumentTest.setRoot('tests')

    dexOptions {
        javaMaxHeapSize "4g"
    }

    lintOptions {
      checkReleaseBuilds false
      abortOnError false
  }
}

packagingOptions {
   exclude 'META-INF/LICENSE.txt'
   exclude 'META-INF/license.txt'
   exclude 'META-INF/notice.txt'
   exclude 'META-INF/NOTICE.txt'
}


defaultConfig {
    // Enabling multidex support.
    multiDexEnabled true
}




buildTypes {
    release {
        signingConfig signingConfigs.release
    }
}

}

当您在项目的Gradle文件中设置不大于22的CompileSDK版本时,就可以实现这一点。
重要!当你将应用程序的一个版本部署到Google Play store时,它是根据大于22的版本编译的,你永远无法切换回低于23的版本。如果使用了上一个稳定版本,并且SDK版本低于23,则您甚至无法切换回上一个稳定版本。你会在Google Play商店中得到一个例外。它不允许这样做。

(几天前我遇到了这种情况,我不小心设置了一个大于22的版本,将其部署到Google Play上,突然我发生了很多崩溃,因为Android 6.0+没有使用权限,我没有要求它,因为它没有在代码中实现。但我也无法切换回Google Play中以前的工作版本。所以我必须快速实现新的权限模型,但由于我没有Android 6.0设备,而且模拟器完全是垃圾和缓慢的,我甚至无法对其进行测试。现在我有3个应用程序在商店里,我不知道它们在Android 6.0+上的表现如何。我再也没有崩溃,所以我想我的实现是正确的)

非常感谢。我将检查此解决方案(但这样,我的应用程序将永远无法使用新SDK的新功能?)。将来,如果我将sdk版本更改为23,我的应用程序会在Google Play中更新吗?使用api 22或更低版本构建应用程序仍然存在一个问题。默认情况下,它将拥有AndroidManifest.xml文件中存在的所有Android M及更高版本的权限。您不需要在运行时执行此操作。但如果用户手动从设置中删除权限,则您的应用程序将开始崩溃。如果您使用compile version 22,您的应用程序功能将无法使用Android 6.0+的功能。这就是为什么你试图压制新的权限模型目前仍然有效的原因,即使是在Android 6.0+设备上,只要你不针对更高版本进行编译。如果你根据大于22的版本编译,你的应用肯定会在商店里更新,但你永远不能切换回以前的版本。在我看来,这是谷歌的一个非常糟糕的设计,因此如果你决定在将来使用一个更新的版本,我建议对你的版本>22进行测试。尝试将api级别更改为22-但仍然无法将文件写入6.0上的sd卡。你可能只设置了目标版本而不是编译版本吗?可能您必须完全卸载并再次在测试设备上安装应用程序,才能使用旧型号的干净安装。