2017-03-17 5 views
0

삼성 갤럭시 탭 S 태블릿으로 작업하고 있으며 런타임에 외부 저장소에 쓸 수있는 권한을 부여하려고합니다.안드로이드 requestPermission 대화 상자가 나타나지 않습니다.

그러나 권한을 요청하는 대화 상자가 표시되지 않습니다. 대신 onRequestPermissionResult 코드는 PERMISSION_DENIED 결과와 함께 즉시 실행됩니다. 나는 심지어 장치의 응용 프로그램 설정에서 수동으로 저장소 권한을 부여하려고 시도했지만 심지어 결과는 PERMISSION_DENIED (grantResults는 -1)입니다.

내 코드는 다음과 같습니다

public class MainActivity extends AppCompatActivity { 

    public static final int REQUEST_STORAGE_PERMISSION = 225; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (Build.VERSION.SDK_INT >= 23) { 
      if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        == PackageManager.PERMISSION_GRANTED) { 
       process(); 
      } else { 
       requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE_PERMISSION); 
      } 
     } 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     switch (requestCode) { 
      case REQUEST_STORAGE_PERMISSION: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        Toast.makeText(getApplicationContext(), "Permission Granted", Toast.LENGTH_LONG).show(); 
        process(); 

       } else { 
        Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_LONG).show(); 
       } 
     } 
    } 


    public void process() { 
     //... 
    } 

} 

응용 프로그램을 시작, 그것은 바로 나에게 전에 대화 상자를 표시하지 않고, -Toast은 "권한 거부"를 표시합니다. 이는 태블릿의 앱 설정에서 저장 용량 권한을 수동으로 부여하더라도 마찬가지입니다.

내 매니페스트 파일에도 유사한 스레드에 제안 된대로 애플리케이션 태그 외부의 적절한 위치에 권한이 있습니다.

나는 앱을 재설치하고 이미 태블릿을 초기화했지만 아무것도 작동하지 않는 것 같습니다. 당신은 당신이 AppCompatActivity

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE_PERMISSION); 

편집

를 사용하는 것처럼 :

답변

1

대신 :

requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE_PERMISSION); 

이 조각

당신은이를 사용할 필요가

작동 다중 프로젝트 모듈 : 당신이 필요합니다. 양쪽에 권한을 추가하려면 Manifest

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

고맙습니다. 그래서 나는 주 프로젝트의 라인을 바꿨고 아무 것도 바뀌지 않았다. 그런 다음, 나는 새 프로젝트를 만들고 코드를 복사하여 작업했습니다. 그래서 나는 주 프로젝트에서 왜 그것이 작동하지 않는지 이유를 찾고 있었다. 프로젝트에 2 개의 추가 모듈이 포함되어 있고 프로젝트 (': module1')를 컴파일하고 프로젝트 (': module2')를 컴파일하면 이 갑자기 작동합니다. 그러나 내가 그들을 다시 언급 할 때, 요청 대화 상자는 더 이상 나타나지 않을 것이다. – FelRPI

+0

이것 좀 봐 [답변] (http://stackoverflow.com/questions/17536652/gradle-and-multi-project-structure) – rafsanahmad007

+0

그래, 사실은 그 마지막 실수를 바로 잡았어. 문제는 주요 모듈의 매니페스트 파일에 필요한 사용 권한 줄만 포함되어 있다는 것입니다. 나도 몰랐어, 모든 모듈은이 라인을 포함해야한다. 그래서 나는 모든 모듈의 목록에 을 추가했으며 현재 작동합니다. 감사합니다. – FelRPI