2017-10-25 3 views
0

에서 아무것도하지 않는다 : 흐름 선에 도달하면ActivityCompat.requestPermissions 내가 <code>PermissionsService</code>라고 요청 권한에 대한 클래스를 만들어 모든

public void getPermission(final String androidManifestPermission, final int mPermissionCode, final String rational) { 
    if (ContextCompat.checkSelfPermission(mactivity, androidManifestPermission) != PackageManager.PERMISSION_GRANTED) { 
     Snackbar.make(mLayout, rational, Snackbar.LENGTH_LONG).setAction("OK", new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       ActivityCompat.requestPermissions(mactivity, new String[]{androidManifestPermission}, mPermissionCode); 
      } 
     }).show(); 
    } else { 
     ActivityCompat.requestPermissions(mactivity, new String[]{androidManifestPermission}, mPermissionCode); <------ nothing happens when the flow reaches here 
    } 
} 

public static enum PERMISSIONS { 
    CAMERA_PERMISSION, 
    GPS_PERMISSION 
} 

ActivityCompat.requestPermissions(mactivity, new String[]{androidManifestPermission}, mPermissionCode); 아무것도 전혀 발생하지 않습니다.

의 값은 MainActivity이고, androidManifestPermission의 값은 "android.permission.ACCESS_FINE_LOCATION"입니다.

문제점을 이해할 수 없습니다.

나는 관련이 있을지도 모른다 무언가를 아주주의했다.

requestPermissions 함수는 첫 번째 인수로 활동을 취합니다. 그러나 실행되는 콜백 onRequestPermissionsResult은 ActivityCompat 인터페이스에 정의됩니다. OnRequestPermissionsResultCallback

어떻게 될 수 있습니까? 함수 requestPermissionsonRequestPermissionsResult의 호출을 Activity (첫 번째 인수)에 어떻게 찾을 수 있습니까?

아마도 내 문제와 관련이 있습니까?

내 액티비티를 OnRequestPermissionsResultCallback 과정으로 구현하려고 시도했습니다. @OverrideonRequestPermissionsResult이라는 함수에 주석을 달았을 때 컴파일러는 onRequestPermissionsResult (인터페이스 OnRequestPermissionsResultCallback에서) 함수가 수퍼 클래스를 재정의하지 않는다고 불평합니다.

내 관심사는 OS에서 사용자의 허가를 요청할 수 없다는 것입니다.

문제가 무엇인지 아는 사람이 있습니까?

runOnUIThread 내가 지금처럼 UIThread에 requestPermissions를 실행하려고

(작동하지 않았다) : 이미 권한이있는 경우

mactivity.runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     ActivityCompat.requestPermissions(mactivity, new String[]{androidManifestPermission}, mPermissionCode); 
    } 
}); 

답변

1

에서, requestPermissions 방법은 권한 대화 상자를 표시하지 않습니다.

아직 권한이없는 경우 사용 권한을 묻는 대화 상자가 표시됩니다.

대화 상자가 표시되고 사용자가 허용하거나 거부하면. 액티비티의 콜백 메소드 onRequestPermissionsResult이 호출됩니다.

액티비티 안에 있지 않는 한 onRequestPermissionsResult 메서드를 재정의 할 수 없습니다.

그러나 권한을 위임하도록 도우미 클래스에서 메서드를 만들 수 있습니다.당신의 헬퍼 클래스에서

:

public static void onRequestPermissionResult(/*params*/){ 
    //your code 
} 

그리고 당신의 활동, 방법을 무시하고 도우미 클래스에 전달 : 내가 사용할 수있는 권한 라이브러리를 구축

@Override 
public void onRequestPermissionResult(/*params*/){ 
    PermissionsService.onRequestPermissionResult(/*params*/); 
} 

누군가. 소스 코드를 보거나 라이브러리를 가져 와서 직접 사용할 수 있습니다.

https://github.com/nabinbhandari/Android-Permissions

+0

안녕. 나는 활동 내에서 onRequestPermissionsResult를 오버라이드하려고 시도했다. 그것은'메소드가 슈퍼 클래스의 메소드를 무효화하지 않는다 '는 것을 알려줍니다. –

+0

나는 가지고있는 문제점을 알고 있습니다. 고마워;) –

+0

도움이 되었다면, 그것을 수락 된 것으로 표시하는 것을 잊지 마십시오. –