权限访问外部存储在AndroidTest
拒绝在我开始解释我的问题,我不得不提到我的新Android开发。权限访问外部存储在AndroidTest
我想写的Android程序,该程序使用了OpenCV的Java API的一些数据处理。我正在为实现算法的类开发单元测试,这些类与任何活动都没有关系。换句话说,我只想在处理活动之前测试方法的功能。
因为我需要能够访问OpenCV的库,我已经写androidTest下我的单元测试Android Studio中。包含数据并需要在程序中读取的文件被复制到/ sdcard/DIR和/ storage/emulated/0/DIR。我已将以下权限添加到AndroidManifest.xml以授予对外部存储的访问权限。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
然而,当我尝试读取外部存储的文件,我得到 open failed: EACCES (Permission denied)
。请注意,我将Environment.getExternalStorageDirectory().getAbsolutePath()
返回的路径与数据文件的名称连接起来,稍后使用FileInputStream
来读取文件的内容。
我也有类似的问题,以及提到的访问将会在运行时被授予的API 23以上的答案,但因为我没有任何活动,我的方法,我想我不能在运行时请求权限。
是否有任何其他目录我可以用来放置我的数据文件,不需要这些权限?我认为
assets
作为一个选项,但我假设资产被放在最终的apk中,如果我需要更改不同的数据文件,我必须每次创建一个新的apk。我应该如何授权访问/ SD卡,而无需询问用户在运行时允许任何活动?
我可以做局部测试,而不是通过androidTest我的Linux机器上安装OpenCV的库?
我发现了针对此问题的临时解决办法的请求。我在MainActivity中设计了一个按钮,当按下时,它会要求用户访问我的文件所在的目录的权限。之后,我可以运行androidTest单元测试,而无需面对异常,因为此权限只需授予一次。
很抱歉,但Android不提供这种类型的访问 ,你需要创建一个活动启动应用程序
我认为,如果你使用的是棉花糖的设备,那么你也将需要问允许在运行时读取和写入外部存储
你可以参考在以下liink https://developer.android.com/training/permissions/requesting.html
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)==
PackageManager.PERMISSION_GRANTED) {
//do the things} else {
requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE },
AnyNumber);
后来赶上
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == AnyNumber) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED
&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {
}
}
}
如何在没有UI的情况下授予权限?不请求权限需要UI? – Mahdi
这是早期版本的Android的可能性,但棉花糖权限将是动态的,安装时不会询问 –