La mise en œuvre de Android 6.0 autorisations dans unity3d
J'ai installé Android Support Library, mais dans le développeur.android site dit que pour sa mise en œuvre sur mon projet j'ai besoin de modifier mon build.gradle fichier que je n'ai pas parce que c'est une Unité de projet.
J'ai créé une génération.gradle fichier de copier le contenu de ce site web: http://gradleplease.appspot.com/ et j'ai mis le fichier sur la racine de mon Unité de projet, mais lorsque j'essaie d'utiliser la bibliothèque, il ne fonctionne pas
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
//Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
//Show an expanation to the user *asynchronously* -- don't block
//this thread waiting for the user's response! After the user
//sees the explanation, try again to request the permission.
} else {
//No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
//MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
//app-defined int constant. The callback method gets the
//result of the request.
}
}
- Vous devez ajouter les autorisations directement dans le AndroidManifest.xml fichier.
- C'est Android 6.0 Guimauve. Qui ne fonctionne plus
InformationsquelleAutor mithrandir | 2016-01-27
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de Java code de demander la permission, et vous avez besoin d'une interface en dit le code Java à partir de l'Unité du C# de l'exécution. Vous devez créer un Plugin Unity pour ce faire.
Ci-dessous est le plugin que j'ai créé pour accorder le WRITE_EXTERNAL_STORAGE autorisation au moment de l'exécution.
Vous avez besoin d'un projet de structure comme ceci:
NoodlePermissionGranter.cs:
NoodlePermissionGranter.java:
BuildNoodlePermissionGranter.sh
Vous avez besoin du projet.propriétés et un mannequin AndroidManifest.xml afin d'avoir une Unité paquet un pot à l'extérieur de l'Plugins/Android/libs
projet.propriétés
AndroidManifest.xml
Ce serait bien si le PermissionRequestCallback fourni l'demandé la permission enum comme paramètre, mais UnityPlayer.UnitySendMessage ne supporte qu'un seul argument de type chaîne et j'ai décidé de ne pas en œuvre la chaîne de sérialisation (à l'aide de JSON pour ce faire serait un bon choix).
Un autre ajout de Jason excellent code pour l'Unité 5.3.3 et (je suis aide 5.4), j'ai ajouté ce manifeste pour bloquer l'Unité automatique de demander au lancement:
En plus de Jason Knight post (que j'ai utilisé pour mon propre plugin Unity pour la manipulation d'exécution des autorisations):
J'ai utilisé Android studio pour la création d'un plugin. J'ai suivi les instructions sur le site suivant et a parfaitement fonctionné: http://www.thegamecontriver.com/2015/04/android-plugin-unity-android-studio.html
J'ai aussi ajouté une autre méthode à l'aide de la shouldShowRequestPermissionRationale() de la fonction, donc je suis en mesure de cacher certains éléments de l'INTERFACE utilisateur si l'utilisateur a refusé l'autorisation et coché la case "Ne pas demander à nouveau" case à cocher.
Les autres réponses (surtout Jason Knight) ont été super utile pour moi, mais j'ai dû modifier le code pour qu'il fonctionne, donc je suis pour le partage de ces changements ici.
Comme indiqué dans les commentaires, que le code a cette erreur dans Android Studio:
final Fragment request = new Fragment();
partie en disant: "Fragments doivent être statiques tels qu'ils peuvent être re-instancié par le système, et anonyme, les classes ne sont pas statiques"Maintenant, je ne suis pas un expert Java donc peut-être que je n'ai pas ces choses-là, mais j'ai essayé de régler les choses comme expliqué ici: Les Fragments doivent être statiques tels qu'ils peuvent être re-instancié par le système, et anonyme, les classes ne sont pas statiques
Surtout, j'ai divisé le Fragment dans une nouvelle classe, de sorte que ce n'est pas une classe anonyme. Alors maintenant, il y a deux fichiers Java:
Qui est la principale classe de plugin, et voici le fragment:
Et pour être complet, voici le C# au sein de l'Unité:
SynapsePlugin.PermissionRequestCallback += OnPermissionRequest
où il existe une méthodeprivate void OnPermissionRequest(bool granted)
J'ai utilisé Jason chevalier de la réponse de créer ce plugin qui fait le travail, tout le code est disponible sur le dépôt github.
Il y a aussi l'unité fichier de package pour une intégration facile.
Eh bien, si vous pouvez utiliser la version d'Android Studio et écrire des codes java puis...
Et en dessous de ce
Vous pouvez vous appeler les RequestPermissions(); dans la Méthode OnCreate
Et la chose la plus importante ici, vous devez soutien-compat-25.1.0.aar fichier (ou la dernière version de ce fichier) de votre
Mettre le soutien-compat-25.1.0.aar fichier dans les Actifs/Plugins/Android avec vos autres fichiers de plugin
C'est tout. en outre, vous pouvez utiliser hawkwood manifeste d'exemple pour désactiver l'unité des autorisations supplémentaires depuis la création de votre propre.