Разрешения среды выполнения Android с Unity 2018.3 - PullRequest
0 голосов
/ 08 января 2019

Есть ли новый метод:

Permission.RequestUserPermission()

остановить цикл кадра? Использование Unity 2018.3.0f2. Метод можно найти в пространстве имен Android. Вот ссылка на дукументацию: https://docs.unity3d.com/2018.3/Documentation/ScriptReference/Android.Permission.RequestUserPermission.html

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Итак, я много пробовал, и вот мой результат в обработке нескольких запросов на разрешение Android. Как я и просил выложить здесь. Я использую простое Eventmanagement для отображения диалога Да Нет, но вы также можете разместить его там. Все теперь довольно самоочевидно. Это работает для меня.

На самом деле, чтобы ответить на мой вопрос. Вызов RequestUserPErmission останавливает ваше приложение.

using UnityEngine;
using System.Collections.Generic;

#if PLATFORM_ANDROID
using UnityEngine.Android;
#endif

public class PermissionTest : MonoBehaviour {

    public static bool PermissionCheckInProgress = false;

    private Dictionary<string, string> m_msgTexts = new Dictionary<string, string>();

#if PLATFORM_ANDROID

    private void OnEnable() {
        App.MsgSystem.MsgSystem.MSG_CONFIRMED.AddListener( HandleAnswer );
    }

    private void OnDisable() {
        App.MsgSystem.MsgSystem.MSG_CONFIRMED.RemoveListener( HandleAnswer );
    }

    private void Start() {
        m_msgTexts.Add( Permission.Camera, "That is why i need the camera." );
        m_msgTexts.Add( Permission.FineLocation, "That is why i need the GPS." );
        m_msgTexts.Add( Permission.ExternalStorageWrite, "That is why i need the SD card." );

        //initial perission request
        foreach (KeyValuePair<string, string> entry in m_msgTexts) {
            if (!Permission.HasUserAuthorizedPermission( entry.Key )) {
                Permission.RequestUserPermission( entry.Key );
            }
        }
    }

    private void Update() {
        if (App.AppManager.Instance._settings._DatenschutzAccepted ) {
            if (!PermissionCheckInProgress) {
                foreach (KeyValuePair<string, string> entry in m_msgTexts) {
                    if (entry.Value != "done") {
                        AskForPermission( entry.Key, entry.Value );
                    }
                }
            }
        }
    }

    private void AskForPermission(string PermissionType, string msg) {
        if (!Permission.HasUserAuthorizedPermission( PermissionType ) && !PermissionCheckInProgress) {

            // The user denied permission to use the asked permission type.
            // so send a msg in our msgsystem to ask again with a description why we need it
            // then wait for the answer

            App.MsgSystem.MsgSystem.MSG_PROMPT.Dispatch( msg, PermissionType );
            PermissionCheckInProgress = true;
            m_msgTexts[ PermissionType ] = "done";
        }
    }

    /// <summary>
    /// Callback from the yes or no dialog
    /// </summary>
    /// <param name="handle"></param>
    private void HandleAnswer(string handle) {
        Permission.RequestUserPermission( handle );

        PermissionCheckInProgress = false;
    }

#endif
}
0 голосов
/ 07 мая 2019

Мой опыт показывает, что этот запрос приостанавливает игру, но только после возвращения метода RequestUserPermission (я думаю, следующий кадр). Так что этот шаблон не работает:

if (!Permission.HasUserAuthorizedPermission(...)) 
{
    Permission.RequestUserPermission(...);
    if (Permission.HasUserAuthorizedPermission(...)) 
    {
        // never happens
    }
}

Вам нужно будет опросить HasUserAuthorizedPermission, чтобы проверить, есть ли у вас разрешение.

0 голосов
/ 08 января 2019

Нет, возвращается сразу. Но вы можете обернуть его в сопрограмму вместо опроса результата, используя yield return "request your permission"

https://docs.unity3d.com/ScriptReference/Application.RequestUserAuthorization.html

изменить: перепутать их. RequestUserPermission немедленно вернется. Я полагаю, вы начинаете это один раз и опрашиваете результат в Update(), пока он не станет правдой.

Однако это не должно останавливать вашу игру. Можете попробовать и опубликовать здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...