最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

微头条丨MAUI之Android记录设备号+动态授权

来源:博客园


(资料图片仅供参考)

一、获取Android唯一标识的方法

android10以前的版本可以通过获取imei得到设备的唯一标识,但是android10以后的系统已无法获取到imei。那么我们该如何确定设备呢?查阅了一些资料,个人看来下面的方法最为稳妥:

通过在app外部保存一个guid,每次打开app时读取该guid确定为设备号。保存在app外部,可以防止重新安装app导致guid被清除。

具体代码:

/// /// 机器码帮助类/// public class JQMHelper{    ///     /// 获取机器码    ///     ///     public static string GetJqm()    {        try        {            string path = System.IO.Path.Combine(GetPath(), "uuid.txt");            return File.ReadAllText(path);        }        catch (Exception ex)        {        }        return "";    }    ///     /// 保存机器码    ///     ///     public static void SaveJqm(string jqm)    {        try        {            string path = System.IO.Path.Combine(GetPath(), "uuid.txt");            File.WriteAllText(path, jqm);        }        catch (Exception ex)        {        }            }    ///     /// 获取路径    ///     ///     private static string GetPath()    {        try        {#if ANDROID            string path = "";            if (Android.OS.Environment.IsExternalStorageEmulated)            {                path = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;            }            else            {                path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);            }            Java.IO.File myDir = new Java.IO.File(path + "/myapp");            if (!myDir.Exists())                myDir.Mkdir();            return path + "/myapp/";#endif        }        catch (Exception ex)        {        }        return "";    }}

调用代码:

//读取保存的机器码string jqm = JQMHelper.GetJqm();if (string.IsNullOrEmpty(jqm)){    jqm = Guid.NewGuid().ToString();    JQMHelper.SaveJqm(jqm);}

此时运行代码,你会发现无法读取和保存guid,什么原因?搞过android的同学肯定知道:缺少了权限。

二、动态授权

官方文档:https://learn.microsoft.com/zh-cn/dotnet/maui/platform-integration/appmodel/permissions?view=net-maui-7.0&tabs=android直接上代码:

//写权限            PermissionStatus status = await Permissions.CheckStatusAsync();            if (status != PermissionStatus.Granted)                status = await Permissions.RequestAsync();//弹窗求授权            if (status != PermissionStatus.Granted)            {                await App.Current.MainPage.DisplayAlert("错误:", "必须给予存储访问权限!请手动给予权限后再重新登录!", "跳转到手动设置页面");#if ANDROID                Intent intent = new Intent(Settings.ActionApplicationDetailsSettings);                Android.Net.Uri uri = Android.Net.Uri.FromParts("package", AppInfo.Current.PackageName, null);                intent.SetData(uri);                Android.App.Application.Context.StartActivity(intent);#endif                return;            }

总结

至此完成。大家是否看出了MAUI的最大优势?

可以直接调用原生API

希望对大家有所帮助。

关键词: