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;
}
이렇게 설치가 다 됐어요.그래서 안심하고 v4를 사용할 수 있습니다.
Reference
이 문제에 관하여(Fragment#requestPermissions()에 빠지다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sho5nn/items/6598268cfc3eda051a2a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)