J'ai un fragment dans lequel j'ai recyclerview et la définition des données dans cette recyclerview à l'aide de l'adaptateur recyclerview.
À présent, un élément de la liste de l'adaptateur contient un bouton sur lequel j'ai besoin de vérifier l'autorisation READ_EXTERNAL_STORAGE sous Android pour obtenir un nouveau modèle d'autorisation sous Android.
J'ai créé une nouvelle fonction dans le fragment de cet adaptateur pour vérifier si l'autorisation est accordée ou non, et demander une autorisation si elle n'est pas déjà accordée.
J'ai passé MyFragment.this en tant que paramètre dans l'adaptateur et en appelant la méthode du fragment sur le bouton, cliquez sur l'adaptateur.
J'ai utilisé le code ci-dessous pour appeler requestPermission en fragment.
if(ContextCompat.checkSelfPermission(mContext, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED)){
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
ConstantVariables.READ_EXTERNAL_STORAGE);
}
J'ai remplacé la méthode onRequestPermissionsResult
dans fragment en utilisant le code ci-dessous:
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case ConstantVariables.READ_EXTERNAL_STORAGE:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, proceed to the normal flow.
startImageUploading();
} else {}
Mais il n'est pas appelé, mais la méthode onRequestPermissionsResult de cette activité est appelée.
J'ai défini la même méthode onRequestPermissionsResult dans l'activité parent de fragment également et elle s'appelle.
Je ne peux pas supprimer la méthode onRequestPermissionsResult de l'activité mais je souhaite appeler la méthode onRequestPermissionsResult de fragment lorsque je demande l'autorisation de fragment . Comment puis-je procéder? Est-ce que je fais quelque chose de mal ici, aidez-moi s'il vous plaît si quelqu'un a une idée ici.
Réponse modifiée pour couvrir des problèmes plus vastes
Je pense que vous confondez la méthode de fragmentation et d’activité. Avait un problème similaire mon projet le mois dernier. S'il vous plaît vérifier si vous avez enfin ce qui suit:
super.onRequestPermissionsResult
à partir de la onRequestPermissionsResult
de l'activité.Voyez si ça aide.
J'ai demandé la permission d'emplacement d'un fragment et dans le fragment, j'avais besoin de changer ceci:
ActivityCompat.requestPermissions(getActivity(), new String[]{
Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_REQ_CODE);
pour ça:
requestPermissions(new String[]{
Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_REQ_CODE);
alors onRequestPermissionsResult a été appelé dans le fragment.
La méthode requestPermissions
sur Fragments nécessite une API de niveau 23 ou supérieur.
Si votre application cible une version inférieure, vous pouvez utiliser
FragmentCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
ConstantVariables.READ_EXTERNAL_STORAGE);
Vous devez d’abord ajouter la dépendance support-v13:
implementation "com.Android.support:support-v13:$supportLibVersion"
private void showContacts() {
if (getActivity().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
PERMISSIONS_REQUEST_READ_STORAGE);
} else {
doShowContacts();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
if (requestCode == PERMISSIONS_REQUEST_READ_STORAGE
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
doShowContacts();
}
}
changer la permission
Vérifiez que PERMISSION_REQUEST_CODE
inonRequestPermissionsResult
et à l'intérieur de votreFragment
contiennent la même valeur.
Pour tragetSDK 28, la vérification du SDK (> 23) et les demandes de permission de fragment fonctionneraient. ActivityCompat.requestPermissions échoue (si vous définissez un code de demande inférieur à 65536, la boîte de dialogue d'autorisation s'affichera. Si l'utilisateur autorise l'autorisation, les autorisations sont fournies, mais aucun rappel ne survient. Si vous définissez une valeur supérieure à 65536, ActivityCompat.requestPermissions échouer immédiatement. Je ne connais pas le raisonnement derrière cette logique. Peut-être un bogue ou intentionnel).
Code de travail:
if (Build.VERSION.SDK_INT >= 23) {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_ACCESS_REQUEST);
}