Maui开机启动程序

Maui开机启动程序

  1. 安卓
    通过广播接收器BroadcastReceiver来接收系统启动完成的消息,有两种方式可以实现广播接收。
    ==安卓10(其他版本请自测)==需要打开上层显示权限<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />,位置在设置/应用和通知/应用程序/高级/显示在其他应用的上层/允许
    第一种,通过属性Attributes设置。

    1. manifest文件清除启动相关权限。

    2. Platforms/Android文件夹下创建类BootBroadcastReceiver,基类为BroadcastReceiver

    3. BootBroadcastReceiver.cs文件命名空间上方添加下面的属性代码。

      1
      2
      3
      4
      
      using Android;
      
      [assembly: UsesPermission(Manifest.Permission.SystemAlertWindow)]
      [assembly: UsesPermission(Manifest.Permission.ReceiveBootCompleted)]
      
    4. 在类上方添加下面的属性代码。

      1
      2
      3
      
      [BroadcastReceiver(Enabled = true)]
      [IntentFilter(new[] { Intent.ActionBootCompleted })]    
      public class BootBroadcastReceiver : BroadcastReceiver
      
    5. 实现基类的抽象方法OnReceive

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      
      public class BootBroadcastReceiver : BroadcastReceiver
      {
          public override void OnReceive(Context? context, Intent? intent)
          {
              Toast.MakeText(context, "Starting...", ToastLength.Long)?.Show();
              var new_intent = new Intent(context, typeof(MainActivity));
              new_intent.AddFlags(ActivityFlags.ResetTaskIfNeeded);
              new_intent.AddFlags(ActivityFlags.ReorderToFront);
              new_intent.AddFlags(ActivityFlags.NewTask);
              context.StartActivity(new_intent);
          }
      
                  //public override void OnReceive(Context context, Intent intent)
              //{
              //    if (intent.Action == null || (!intent.Action.Equals(Intent.ActionBootCompleted)
              //                                  && !intent.Action.Equals(Intent.ActionReboot)
              //                                  && !intent.Action.Equals(Intent.ActionLockedBootCompleted)
              //                                  && !intent.Action.Equals(Intent.ActionUserInitialize)
              //                                  && !intent.Action.Equals("android.intent.action.QUICKBOOT_POWERON")
              //                                  && !intent.Action.Equals("com.htc.intent.action.QUICKBOOT_POWERON"))) return;
              //    Toast.MakeText(context, "GuzelBoard Starting...", ToastLength.Long)?.Show();
              //    var s = new Intent(context, typeof(MainActivity));
              //    s.AddFlags(ActivityFlags.ResetTaskIfNeeded);
              //    s.AddFlags(ActivityFlags.ReorderToFront);
              //    s.AddFlags(ActivityFlags.NewTask);
              //    context.StartActivity(s);
              //}
      }
      

    第二种,通过修改manifest文件实现。

    1. AndroidManifest.xml文件添加如下代码。
    1
    2
    
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    
    1. AndroidManifest.xml文件的application中添加如下代码:
    1
    2
    3
    4
    5
    
    <receiver android:name="com.yourpackagename.app.BootBroadcastReceiver">
          <intent-filter>
              <action android:name="android.intent.action.BOOT_COMPLETED"/>
          </intent-filter>
    </receiver>
    
    1. Platforms/Android文件夹下创建类BootBroadcastReceiver,基类为BroadcastReceiver

    2. 在类上方添加下面的属性代码。

      1
      2
      3
      
      [BroadcastReceiver(Name = "com.yourpackagename.app.BootBroadcastReceiver", Enabled = true)]
      [IntentFilter(new[] { Intent.ActionBootCompleted })]    
      public class BootBroadcastReceiver : BroadcastReceiver
      
    3. 实现基类的抽象方法OnReceive

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      
      public class BootBroadcastReceiver : BroadcastReceiver
      {
          public override void OnReceive(Context? context, Intent? intent)
          {
              Toast.MakeText(context, "Starting...", ToastLength.Long)?.Show();
              var new_intent = new Intent(context, typeof(MainActivity));
              new_intent.AddFlags(ActivityFlags.ResetTaskIfNeeded);
              new_intent.AddFlags(ActivityFlags.ReorderToFront);
              new_intent.AddFlags(ActivityFlags.NewTask);
              context.StartActivity(new_intent);
          }
      }
      
  2. Windows
    使用指令start 程序名:启动程序,将启动指令放在bat文件中,然后加入开机启动文件夹。

Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy