Mer*_*ert 249 android android-permissions android-5.0-lollipop android-storage
我正进入(状态
开放失败:
EACCES (Permission denied)
在线上 OutputStream myOutput = new FileOutputStream(outFileName);
我检查了根,我试过了android.permission.WRITE_EXTERNAL_STORAGE
.
我该如何解决这个问题?
try {
InputStream myInput;
myInput = getAssets().open("XXX.db");
// Path to the just created empty db
String outFileName = "/data/data/XX/databases/"
+ "XXX.db";
// Open the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFileName);
// Transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
// Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
buffer = null;
outFileName = null;
}
catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
Jus*_*ler 316
对于API 23+,您需要请求读/写权限,即使它们已经在您的清单中.
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
/**
* Checks if the app has permission to write to device storage
*
* If the app does not has permission then the user will be prompted to grant permissions
*
* @param activity
*/
public static void verifyStoragePermissions(Activity activity) {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml中
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
有关请求API 23+权限的官方文档,请查看https://developer.android.com/training/permissions/requesting.html
use*_*990 230
我遇到了同样的问题......那<uses-permission
是在错误的地方.这是正确的:
<manifest>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
...
<application>
...
<activity>
...
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
该uses-permission
标签必须是外面application
的标签.
小智 73
将android:requestLegacyExternalStorage="true"添加到 Android Manifest 它在 SDK 29+
或在迁移Android X之后与 Android 10 (Q) 一起使用。
<application
android:name=".MyApplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon=""
android:label=""
android:largeHeap="true"
android:supportsRtl=""
android:theme=""
android:requestLegacyExternalStorage="true">
Run Code Online (Sandbox Code Playgroud)
h22*_*h22 58
我在模拟器中运行应用程序时观察过一次.在仿真器设置中,您需要正确指定外部存储器的大小("SD卡").默认情况下,"外部存储"字段为空,这可能意味着即使在清单中授予了权限,也不会抛出此类设备和EACCES.
joh*_*ohn 50
除了所有答案之外,请确保您没有将手机用作USB存储设备.
我在启用USB存储模式的HTC Sensation上遇到了同样的问题.我仍然可以调试/运行应用程序,但我无法保存到外部存储.
Uri*_*kel 29
Google在Android Q上具有一项新功能:外部存储的过滤视图。一个快速的解决方法是在AndroidManifest.xml文件中添加以下代码:
<manifest ... >
<!-- This attribute is "false" by default on apps targeting Android Q. -->
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
您可以在这里了解更多信息:https : //developer.android.com/preview/privacy/scoped-storage
Pir*_*jin 28
我的问题是"TargetApi(23)",如果你的minSdkVersion低于23,则需要这个.
所以,我有以下代码段的请求权限
protected boolean shouldAskPermissions() {
return (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1);
}
@TargetApi(23)
protected void askPermissions() {
String[] permissions = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE"
};
int requestCode = 200;
requestPermissions(permissions, requestCode);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
if (shouldAskPermissions()) {
askPermissions();
}
}
Run Code Online (Sandbox Code Playgroud)
omz*_*zer 28
请注意,解决方案:
<application ...
android:requestLegacyExternalStorage="true" ... >
Run Code Online (Sandbox Code Playgroud)
是暂时的,您的应用迟早应该迁移到使用Scoped Storage
.
在 Android 10 中,您可以使用建议的解决方案绕过系统限制,但在 中Android 11 (R) it is mandatory to use scoped storage
,如果您继续使用旧逻辑,您的应用可能会崩溃!
这个视频可能是一个很好的帮助。
Zoo*_*ooS 13
我在三星Galaxy Note 3上遇到了同样的问题,运行CM 12.1.我的问题是我有
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18"/>
Run Code Online (Sandbox Code Playgroud)
并且必须使用它来拍摄和存储用户照片.当我试图在ImageLoader中加载那些相同的照片时,我收到了(Permission denied)
错误.解决方案是明确添加
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
由于上述权限仅将写入权限限制为API版本18,并且具有读取权限.
小智 6
我有同样的问题,没有任何建议有帮助.但是我发现了一个有趣的原因,在物理设备上,Galaxy Tab.
启用USB存储时,外部存储读写权限不起作用.只需关闭USB存储,并使用正确的权限,您将解决问题.
上面限制将文件存储在directory
应用程序目录之外的目录中。因此,要生成新文件或创建新文件,请使用您的应用程序目录,如下所示:-API 29+
所以正确的方法是:-
val file = File(appContext.applicationInfo.dataDir + File.separator + "anyRandomFileName/")
Run Code Online (Sandbox Code Playgroud)
您可以将任何数据写入此生成的文件中!
上面的内容file
是可以访问的,但不能访问throw any exception
,因为它位于您自己开发的应用程序的目录中。
另一种选择是 android:requestLegacyExternalStorage="true"
按照manifest application tag
建议的,Uriel
但它不是永久的解决方案!
小智 5
我希望下面的所有内容都/data
属于"内部存储".但是,您应该能够写信给/sdcard
.
小智 5
如下所示,更改您/system/etc/permission/platform.xml
和组中的权限属性需要提及.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
<group android:gid="sdcard_rw" />
<group android:gid="media_rw" />
</uses-permission>
Run Code Online (Sandbox Code Playgroud)
小智 5
尝试在Galaxy S5(android 6.0.1)的DCIM / camera文件夹中写入图像时遇到相同的错误,我发现只有此文件夹受到限制。我可以直接写入DCIM /任何文件夹,但不能写入相机。这应该是基于品牌的限制/定制。
在我的newFile之前加一个斜杠“ /”之后,奇怪的是我的问题解决了。我改变了这个:
File myFile= new File(Environment.getExternalStorageDirectory() + "newFile");
Run Code Online (Sandbox Code Playgroud)
对此:
File myFile= new File(Environment.getExternalStorageDirectory() + "/newFile");
Run Code Online (Sandbox Code Playgroud)
Android Q解决方案:
<application ...
android:requestLegacyExternalStorage="true" ... >
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
376653 次 |
最近记录: |