权限访问外部存储在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以上的答案,但因为我没有任何活动,我的方法,我想我不能在运行时请求权限。

  1. 是否有任何其他目录我可以用来放置我的数据文件,不需要这些权限?我认为assets作为一个选项,但我假设资产被放在最终的apk中,如果我需要更改不同的数据文件,我必须每次创建一个新的apk。

  2. 我应该如何授权访问/ SD卡,而无需询问用户在运行时允许任何活动?

  3. 我可以做局部测试,而不是通过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) { 
      } 
     } 
    } 
+0

如何在没有UI的情况下授予权限?不请求权限需要UI? – Mahdi

+0

这是早期版本的Android的可能性,但棉花糖权限将是动态的,安装时不会询问 –