You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

111 lines
2.7 KiB

using System;
using UnityEngine;
public class UniAndroidPermission : MonoBehaviour
{
const string PackageName = "net.sanukin.PermissionManager";
static Action onAllowCallback;
static Action onDenyCallback;
static Action onDenyAndNeverAskAgainCallback;
void Awake()
{
DontDestroyOnLoad(gameObject);
}
public static bool IsPermitted(AndroidPermission permission)
{
#if !UNITY_EDITOR && UNITY_ANDROID
using (var permissionManager = new AndroidJavaClass(PackageName))
{
return permissionManager.CallStatic<bool>("hasPermission", GetPermittionStr(permission));
}
#else
return true;
#endif
}
public static void RequestPermission(AndroidPermission permission, Action onAllow = null, Action onDeny = null, Action onDenyAndNeverAskAgain = null)
{
#if !UNITY_EDITOR && UNITY_ANDROID
using (var permissionManager = new AndroidJavaClass(PackageName))
{
permissionManager.CallStatic("requestPermission", GetPermittionStr(permission));
onAllowCallback = onAllow;
onDenyCallback = onDeny;
onDenyAndNeverAskAgainCallback = onDenyAndNeverAskAgain;
}
#else
Debug.LogWarning("UniAndroidPermission works only Androud Devices.");
#endif
}
private static string GetPermittionStr(AndroidPermission permittion)
{
return "android.permission." + permittion.ToString();
}
private void OnAllow()
{
if (onAllowCallback != null)
{
onAllowCallback();
}
ResetAllCallBacks();
}
private void OnDeny()
{
if (onDenyCallback != null)
{
onDenyCallback();
}
ResetAllCallBacks();
}
private void OnDenyAndNeverAskAgain()
{
if (onDenyAndNeverAskAgainCallback != null)
{
onDenyAndNeverAskAgainCallback();
}
ResetAllCallBacks();
}
private void ResetAllCallBacks(){
onAllowCallback = null;
onDenyCallback = null;
onDenyAndNeverAskAgainCallback = null;
}
}
// Protection level: dangerous permissions 2015/11/25
// http://developer.android.com/intl/ja/reference/android/Manifest.permission.html
public enum AndroidPermission
{
ACCESS_COARSE_LOCATION,
ACCESS_FINE_LOCATION,
ADD_VOICEMAIL,
BODY_SENSORS,
CALL_PHONE,
CAMERA,
GET_ACCOUNTS,
PROCESS_OUTGOING_CALLS,
READ_CALENDAR,
READ_CALL_LOG,
READ_CONTACTS,
READ_EXTERNAL_STORAGE,
READ_PHONE_STATE,
READ_SMS,
RECEIVE_MMS,
RECEIVE_SMS,
RECEIVE_WAP_PUSH,
RECORD_AUDIO,
SEND_SMS,
USE_SIP,
WRITE_CALENDAR,
WRITE_CALL_LOG,
WRITE_CONTACTS,
WRITE_EXTERNAL_STORAGE
}