Maui实用功能

Maui实用功能

  1. 获取安卓平台的实例。

    1
    2
    3
    
    #if ANDROID
        var activity = Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
    #endif
    
  2. 获取安卓平台上下文。

    1
    2
    3
    
    var context = Android.App.Application.Context;
    // or
    context = Platform.AppContext;
    
  3. 判断安卓编译版本。

    1
    2
    3
    
    if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.R)
    {
    }
    
  4. 跨平台分别设置参数时需要将对应平台的参数都进行设置,否则可能会触发警告。

    1
    2
    3
    4
    
    <!--无警告-->
    <Setter Property="FontSize" Value="{OnPlatform Android=16,WinUI=15}"/> 
    <!--有警告-->
    <Setter Property="FontSize" Value="{OnPlatform Android=16}"/> 
    
  5. 安卓使用apk格式发布release可能会无法正常运行,需要改回aab格式。
    如果项目引用第三方so文件,文件名字中如果有特殊符号或者大小写不规范可能会引起发布后的程序无法正常运行,需要将名字改成简短规范。

    1
    2
    3
    
        <!--<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-android|AnyCPU'">
          <AndroidPackageFormat>apk</AndroidPackageFormat>
        </PropertyGroup>-->
    
  6. vs生成安卓时项目文件生成属性参考链接

  7. 指定安卓编译sdk版本,修改AndroidManifest.xml文件。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    <manifest xmlns:android="http://schemas.android.com/apk/res/android">
        <application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true" android:noHistory="true"></application>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
        <uses-permission android:name="android.permission.READ_SETTINGS"/>
        <uses-permission android:name="android.permission.READ_SECURE_SETTINGS"/>
        <!--增加目标版本-->
        <uses-sdk android:targetSdkVersion="29" /> 
    </manifest>
    
  8. 安卓平台获取所有设置字符串。

    1
    2
    3
    4
    
    var list = Intent.Class.GetFields();
    // ACTION_AIRPLANE_MODE_CHANGED
    // ACTION_ALARM_CHANGED
    // EXTRA_ALARM_COUNT
    
  9. 修改安卓平台系统设置。参考设置项

    1
    2
    
    // 修改系统属性 persist.sys.language 的值为 zh_CN
    Settings.System.putString(getContentResolver(), Settings.System.LANGUAGE, "zh_CN");
    
  10. 重启或关机(root权限)。

    1
    2
    3
    4
    5
    
    Java.Lang.Runtime.GetRuntime().Exec("su");
    // 重启
    Java.Lang.Runtime.GetRuntime().Exec("reboot");
    // 关机
    Java.Lang.Runtime.GetRuntime().Exec("reboot -p");
    
  11. 关闭当前程序。

    1
    
    Application.Current.Quit();
    
  12. 获取系统权限,详细权限参考官方介绍

    1
    2
    3
    4
    5
    6
    7
    8
    
    var state = await Permissions.RequestAsync<Permissions.Bluetooth>();
    if (state != PermissionStatus.Granted)
    {
        if (Application.Current != null && Application.Current.MainPage != null)
        {
            await Application.Current.MainPage.DisplayAlert($"警告", $"缺少必需权限,程序将无法正常运行!", $"确定");
        }
    }
    
  13. 强制关闭已经打开的进程。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    Process process = Process.GetCurrentProcess();
    var pro = Process.GetProcessesByName(process.ProcessName);
    foreach (var p in pro)
    {
        if (p.Id != process.Id)
        {
            if (p.MainModule.FileName == process.MainModule.FileName)
            {
                p.Kill();
            }
        }
    }
    
  14. 获取IP地址。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    var upAndNotLoopbackNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces().Where(n => n.NetworkInterfaceType != NetworkInterfaceType.Loopback
                                                                                              && n.OperationalStatus == OperationalStatus.Up);
    
    foreach (var networkInterface in upAndNotLoopbackNetworkInterfaces)
    {
        var iPInterfaceProperties = networkInterface.GetIPProperties();
    
        var unicastIpAddressInformation = iPInterfaceProperties.UnicastAddresses.FirstOrDefault(u => u.Address.AddressFamily == AddressFamily.InterNetwork);
        if (unicastIpAddressInformation != null)
        {
            return unicastIpAddressInformation.Address.ToString();
        }                
    }
    
Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy