私はナビゲーションドロワーを持っています。ナビゲーション・ドロワーで私は断片を膨らませています。最初の断片では、ユーザーにランタイムのアクセス許可を求める。 2番目の断片では、同じアクセス権を再度要求します。私の場合、最初の断片は許可を求める。 2番目の断片では、許可を求めることはありません。誰が問題を教えてくれますか?両方の状況で同じコードを使用しているからです。アンドロイドの異なる場所で同じ実行時アクセス許可を求めることはできますか?
これが私の最初のフラグメントのコードである: -
if (checkPermission(Manifest.permission.ACCESS_FINE_LOCATION, getActivity().getApplicationContext(), getActivity())) {
IsConsumed = 1;
fetchLocationData();
} else {
requestPermission(Manifest.permission.ACCESS_FINE_LOCATION, PERMISSION_REQUEST_CODE_LOCATION, getActivity().getApplicationContext(), getActivity());
}
public void requestPermission(String strPermission, int perCode, Context _c, Activity _a) {
if (ActivityCompat.shouldShowRequestPermissionRationale(_a, strPermission)) {
Toast.makeText(getActivity(), "GPS permission allows us to access location data. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show();
} else {
ActivityCompat.requestPermissions(_a, new String[]{strPermission}, perCode);
}
}
public static boolean checkPermission(String strPermission, Context _c, Activity _a) {
int result = ContextCompat.checkSelfPermission(_c, strPermission);
if (result == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
return false;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSION_REQUEST_CODE_LOCATION:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
fetchLocationData();
} else {
Toast.makeText(getActivity(), "Permission Denied, You cannot access location data.", Toast.LENGTH_LONG).show();
}
break;
}
}
私は2番目のフラグメントで同じコードを使用しています。それは許可を求めるものではありません。私はそれがif()条件に入るログを印刷しようとしました。ログを出力します。しかし、許可を求めることはありません。
おそらく、最初の許可は、他のフラグメントでは発生しないという理由で許可されました。 – Enzokie
@Enzokie no!私が許可を拒否した後は、もう一度尋ねることはありません。 – aarav
ちょっと@aaravさんがあなたの問題を解決した答えはありましたか? –