-
安卓
通过广播接收器BroadcastReceiver
来接收系统启动完成的消息,有两种方式可以实现广播接收。
==安卓10(其他版本请自测)==需要打开上层显示权限<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
,位置在设置/应用和通知/应用程序/高级/显示在其他应用的上层/允许
。
第一种,通过属性Attributes
设置。-
从
manifest
文件清除启动相关权限。 -
在
Platforms/Android
文件夹下创建类BootBroadcastReceiver
,基类为BroadcastReceiver
。 -
在
BootBroadcastReceiver.cs
文件命名空间上方添加下面的属性代码。1 2 3 4
using Android; [assembly: UsesPermission(Manifest.Permission.SystemAlertWindow)] [assembly: UsesPermission(Manifest.Permission.ReceiveBootCompleted)]
-
在类上方添加下面的属性代码。
1 2 3
[BroadcastReceiver(Enabled = true)] [IntentFilter(new[] { Intent.ActionBootCompleted })] public class BootBroadcastReceiver : BroadcastReceiver
-
实现基类的抽象方法
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
文件实现。- 在
AndroidManifest.xml
文件添加如下代码。
1 2
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
- 在
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>
-
在
Platforms/Android
文件夹下创建类BootBroadcastReceiver
,基类为BroadcastReceiver
。 -
在类上方添加下面的属性代码。
1 2 3
[BroadcastReceiver(Name = "com.yourpackagename.app.BootBroadcastReceiver", Enabled = true)] [IntentFilter(new[] { Intent.ActionBootCompleted })] public class BootBroadcastReceiver : BroadcastReceiver
-
实现基类的抽象方法
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); } }
-
-
Windows
使用指令start 程序名:
启动程序,将启动指令放在bat文件中,然后加入开机启动文件夹。