兩種類型的權限設置
1. AndroidManifest.xml中添加權限
2. 動態添加權限(有些權限 Android6.0之后需要動態添加權限),在使用到權限時,監測是否授權,沒有授權的申請授權。
AndroidManifest.xml中添加權限
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.weatherstation.app" android:installLocation="auto"> <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" /> <application android:label="氣象生態環境監測系統" android:usesCleartextTraffic="true" android:icon="@drawable/icon"></application> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 訪問網絡,網絡定位需要上網--> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> </manifest>
動態添加權限(AndroidManifest.xml中也要加入該權限)
Android中的權限申請
class PermisionUtils { private static int REQUEST_EXTERNAL_STORAGE = 1; private static String[] PERMISSIONS_STORAGE = { Manifest.Permission.ReadExternalStorage, Manifest.Permission.WriteExternalStorage}; public static bool VerifyStoragePermissions(Activity activity) { var permission = ActivityCompat.CheckSelfPermission(activity, Manifest.Permission.WriteExternalStorage); if (permission == Permission.Denied) { ActivityCompat.RequestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE); return false; } return true; } }
MainActivity.cs中返回
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) { Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults); }
【推薦】可以在Nuget添加Plugin.Permissions
這個可以對各個Android IOS UWP統一申請權限
protected override void OnAppearing() { base.OnAppearing(); SetPermission(); } private async void SetPermission() { // Granted storage permission var storageStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage); if (storageStatus != PermissionStatus.Granted) { var results = await CrossPermissions.Current.RequestPermissionsAsync(new[] { Permission.Storage }); storageStatus = results[Permission.Storage]; } }