After checking the information, Unity has its own method Permission to dynamically obtain user permissions. It requires the UnityEngine.Android namespace and uses the dynamic acquisition interface RequestUserPermissions. The parameter is a string array type parameter. Test code
:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Android;
using UnityEngine.UI;
public class PermissionMgr : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
string[] NowTypes = new string[]{
"android.permission.MANAGE_DOCUMENTS",
"android.permission.DELETE_CACHE_FILES",
"android.permission.READ_OWNER_DATA",
"android.permission.INTERNET",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS",
"android.permission.READ_SMS",
"android.permission.RECEIVE_SMS",
"android.permission.ANSWER_PHONE_CALLS",
"android.permission.PROCESS_OUTGOING_CALLS",
"android.permission.READ_CONTACTS",
"android.permission.READ_CALENDAR",
"android.permission.RECORD_AUDIO",
"android.permission.STATUS_BAR",
"android.permission.EXPAND_STATUS_BAR",
"android.permission.INSTALL_PACKAGES",
"android.permission.WAKE_LOCK",
};
Permission.RequestUserPermissions(NowTypes);
}
// Update is called once per frame
void Update()
{
}
}
You can go here to check Android permissions and quote this guy:
Android permissions summary quote
The most important thing is: dynamic acquisition requires modifying the UnityManifest.xml file in the unity installation directory:
This is my directory: D:\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Apk (right-click the unity desktop icon to open the target folder). Just add the
permissions you need to obtain above: "</manifest>"
<?xml version="1.0" encoding="utf-8"?>
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
xmlns:tools="http://schemas.android.com/tools">
<application>
<activity android:name="com.unity3d.player.UnityPlayerActivity"
android:theme="@style/UnityThemeSelector">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
<uses-permission android:name="android.permission.DELETE_CACHE_FILES" />
<uses-permission android:name="android.permission.READ_OWNER_DATA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.STATUS_BAR" />
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
</manifest>
Test after packaging: No problem, you can obtain the corresponding permissions