2017-04-15 7 views
0

내 질문에 대한 설명을 시작하기 전에 Android 개발을 처음 사용한다고 언급해야합니다.AndroidTest에서 거부 된 외부 저장소에 액세스 할 수있는 권한

일부 데이터 처리를 위해 OpenCV의 Java API를 사용하는 Android 용 프로그램을 작성하려고합니다. 알고리즘을 구현하는 클래스에 대한 단위 테스트를 개발 중이며이 클래스는 아직 어떤 활동과도 관련이 없습니다. 다시 말해서, 나는 활동을 다루기 전에 메소드의 기능을 테스트하기를 원한다.

OpenCV 라이브러리에 액세스해야하기 때문에 Android Studio에서 androidTest에 단위 테스트를 작성했습니다. 데이터를 포함하고 프로그램에서 읽을 필요가있는 파일은/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을 사용하여 파일의 내용을 읽습니다.

나는 23 세 이상의 API에 대해 런타임에 액세스 권한을 부여해야한다는 비슷한 질문과 답변을 보았습니다.하지만 내 메서드에 대한 활동이 없기 때문에 런타임에 권한을 요청할 수 없다고 생각합니다.

  1. 이러한 권한이 필요하지 않은 데이터 파일을 배치하는 데 사용할 수있는 다른 디렉토리가 있습니까? 나는 assets을 옵션으로 생각했지만 자산이 최종 apk에 저장되어 있다고 가정하고 다른 데이터 용 파일을 변경해야 할 때마다 매번 새로운 apk를 만들어야합니다.

  2. 런타임시 권한을 묻는 활동을하지 않고/sdcard에 대한 액세스를 어떻게 부여해야합니까?

  3. 내 Linux 컴퓨터에 OpenCV 라이브러리를 설치하여 androidTest 대신 로컬 테스트를 수행 할 수 있습니까?

답변

0

에서 이러한 요청을 잡을 수있어. MainActivity에서 버튼을 눌렀을 때 내 파일이있는 디렉토리에 액세스 할 수있는 권한이 있는지 묻습니다. 이후에는이 권한을 한 번만 부여 받아야하기 때문에 android 테스트 유닛 테스트를 실행할 수 있습니다.

0

죄송하지만 안드로이드는 당신이 당신이 물어 필요합니다 마시 멜로 장치를 사용하는 경우

내가 생각하는 응용 프로그램을 실행하는 활동을 작성해야합니다 액세스 의 유형을 제공하지 않습니다 런타임에 외부 저장 장치를 읽고 쓸 수있는 권한이

다음 liink https://developer.android.com/training/permissions/requesting.html

0
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가 없어도 어떻게 권한을 부여 할 수 있습니까? requestPermissions에는 UI가 필요하지 않은가요? – Mahdi

+0

이전 버전의 Android에서는 가능했으나 marshmallow 권한은 동적이며 설치 중에는 표시되지 않습니다. –