首页 > 其他分享 >MAUI之Android记录设备号+动态授权

MAUI之Android记录设备号+动态授权

时间:2023-04-14 20:14:19浏览次数:49  
标签:jqm return string System path MAUI 授权 Android

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

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

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

具体代码:

/// <summary>
/// 机器码帮助类
/// </summary>
public class JQMHelper
{
    /// <summary>
    /// 获取机器码
    /// </summary>
    /// <returns></returns>
    public static string GetJqm()
    {
        try
        {
            string path = System.IO.Path.Combine(GetPath(), "uuid.txt");
            return File.ReadAllText(path);
        }
        catch (Exception ex)
        {
        }
        return "";
    }

    /// <summary>
    /// 保存机器码
    /// </summary>
    /// <param name="jqm"></param>
    public static void SaveJqm(string jqm)
    {
        try
        {
            string path = System.IO.Path.Combine(GetPath(), "uuid.txt");
            File.WriteAllText(path, jqm);
        }
        catch (Exception ex)
        {
        }
        
    }

    /// <summary>
    /// 获取路径
    /// </summary>
    /// <returns></returns>
    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<Permissions.StorageWrite>();
            if (status != PermissionStatus.Granted)
                status = await Permissions.RequestAsync<Permissions.StorageWrite>();//弹窗求授权

            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

希望对大家有所帮助。

标签:jqm,return,string,System,path,MAUI,授权,Android
From: https://www.cnblogs.com/xiaoa/p/17319790.html

相关文章

  • 【Linux】添加用户并授权
    1.Centos添加用户并授权<!--添加用户-->useradd-d/home/zhangsan-mzhangsan<!--设置密码-->passwdzhangsan<!--授予sudo权限-->usermod-a-Gadmzhangsanusermod-a-Gsudozhangsan<!--或修改/etc/sudoers文件-->zhangsanALL=(ALL)AL......
  • android 读取本地数据库db文件(Android sqlite)
    本文由简悦SimpRead转码,原文地址cloud.tencent.com腾讯云备案控制台开发者社区学习实践活动专区工具TVP文章/答案/技术大牛搜索搜索关闭写文章提问登录/注册全栈程序员站长55.1K篇文章android读取本地数据库db文件(Androidsqlite)转到我的清单专栏首页全栈程序员必看......
  • Android兼容性矩阵
    起因新上的设备,发现hal不支持,因此记录下,下图已经是修复了正常的了36的对应的native函数是android_location_GnssLocationProvider_is_supported,这一看就是hal没有staticjbooleanandroid_location_GnssLocationProvider_is_supported(JNIEnv*/*env*/,jclas......
  • android:keytool生成应用签名证书(java 15)
    一,查看是否已安装keytoolkeytool命令的程序位于jdk的安装目录/bin下,1,查看是否有keytool命令已安装?[lhdop@blog~]$ls/usr/local/soft/jdk-17/bin/keytool/usr/local/soft/jdk-17/bin/keytool2,查看帮助:列出可用的命令[lhdop@blog~]$keytool--helpKeyandCert......
  • FFmpeg 编译集成至android
    FFmpeg编译问题记录1.此前没有编译大型的C项目的场景,甚至对整个编译过程已经陌生了,重拾编译之路,以前的编译都是开IDE去操作,现在需要使用编译工具链去编译整套项目,所以需要了解CMake,configure等工具的使用。2.简单学习configure,cmake等构建工具后,开始编译Cmake学习记录3.ffmp......
  • Android 平台使用 appium 自动化操作 webView 的经验
    更多内容见草稿:https://wkmcyz.notion.site/Appium-H5-c9c287855ef74ef0ae5d8f819da3923f本文章主要介绍在Android平台上使用appium对app内的webView进行自动化操作上的一些知识,包括一些配置和可以进行的操作等。需要读者:熟悉如何使用appium进行nativeapp的自动......
  • android: minSdkVersion、targetSdkVersion、CompileSdkVersion三个api版本号的区别
    一,minSdkVersion:   app可以安装的最低的api版本:   1,安装:googleplay和应用市场会根据用户的api版本,           判断用户是否可以看到你的app    2, 运行:在minSdkVersion指定版本的api上运行时,           ......
  • android S 上 安装apk出现android.os.FileUriExposedException
    报错:android.os.FileUriExposedException:file:///data/user/0/com.example.overlay.exposedbeyondappthroughIntent.getData()原因:andorid7.0系统以后,引入“私有目录被限制访问”,“StrictModeAPI政策”导致的问题。解决办法很简单。就是用新的方式获取uri。”St......
  • adb命令获取android app FPS 执行命令后只出现一行16666666的解决方案
    一、问题描述使用命令command='adbshelldumpsysSurfaceFlinger--latency{}/{}#0'.format(package_name,activity)获取androidapp的fps数据,执行命令后街股票打印如下:  二、问题分析1、刚开始以为是命令里面的SurfaceView写的有问题,执行命令adbshelldumpsys......
  • Android性能优化之APK瘦身
    结构分析首先上传一张瘦身前通过Analyzeapp分析出来的图片(打开方式:AndroidStudio下——>Build——>Analyzeapp):imageAPK包结构如下:lib/:包含特定于处理器软件层的编译代码。该目录包含了每种平台的子目录,像armeabi,armeabi-v7a,arm64-v8a,x86,x86_64,和mips。大多数情况......