Fragment#requestPermissions()에 빠지다
                                            
                                                
                                                
                                                
                                                
                                                
                                                 12447 단어  Android
                    
권한을 요청할 때 다음과 같은 느낌이 든다.
공식.에 호출
Activity#requestPermissions()이 적혀 있고 Activity#onRequestPermissionsResult()에 요청 결과를 받습니다.if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {
    requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
    // app-defined int constant
    return;
}
@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // permission was granted, yay! do the
                // calendar task you need to do.
            } else {
                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }
        // other 'switch' lines to check for other
        // permissions this app might request
    }
}
푹 빠진 곳
1. Fragment에도 RequestPermissions()가 있음
@hotchemi 덕분에 프래그먼트도 이뤄졌다
requestPermissions().공식.만 봐도 Activity만 아픈 것 같아...안드로이드 M Preview 버전의 소스 코드를 보면 확실히 설치되어 있음
requestPermissions()과onRequestPermissionsResult() 을 알 수 있습니다.따라서 Fragment에서 권한 요구를 안심하고 실현할 수 있습니다!!!!!!!
package android.app;
public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListener {
    public final void requestPermissions(@NonNull String[] permissions, int requestCode) {
        if (mHost == null) {
            throw new IllegalStateException("Fragment " + this + " not attached to Activity");
        }
        Intent intent =
                mHost.getContext().getPackageManager().buildRequestPermissionsIntent(permissions);
        mHost.onStartActivityFromFragment(this, intent, requestCode, null);
    }
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
            @NonNull int[] grantResults) {
        /* callback - do nothing */
    }
2. Fragment에 requestPermissions가 없습니다()
표제 사기.
Fragment에
requestPermissions()가 있기 때문에 App Permission 샘플을 만신창이로 실시했지만 코드 완성requestPermissions()은 후보에 포함되지 않았다!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
 "응......응--응......"많은 시간을 낭비했지만 이유는 간단했다.
잘못
import android.support.v4.app.Fragment;
public class PermissionFragment extends Fragment {
    private void requestReadContactsPermission() {
        requestPermissions(
                new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);
    }
import android.app.Fragment;
public class PermissionFragment extends Fragment {
    private void requestReadContactsPermission() {
        requestPermissions(
                new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);
    }
총결산
현상은 오징어 중 하나로 처리해야 한다.
android.app.Fragment의 한 쪽을 importActivity 측면에서 실현추기
supportv4 소스 코드를 봤어요.
    public final void requestPermissions(@NonNull String[] permissions, int requestCode) {
        if (mHost == null) {
            throw new IllegalStateException("Fragment " + this + " not attached to Activity");
        }
        mHost.onRequestPermissionsFromFragment(this, permissions,requestCode);
    }
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
            @NonNull int[] grantResults) {
        /* callback - do nothing */
    }
    public boolean shouldShowRequestPermissionRationale(@NonNull String permission) {
        if (mHost != null) {
            return mHost.onShouldShowRequestPermissionRationale(permission);
        }
        return false;
    }
Reference
이 문제에 관하여(Fragment#requestPermissions()에 빠지다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sho5nn/items/6598268cfc3eda051a2a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)