如何在 C# Xamarin 中关闭 Android 设备

问题描述 投票:0回答:3

我试过用这个关机

Java.Lang.Runtime.GetRuntime().Exec(new String[] { "/system/xbin/su", "-c", "shutdown" });

还有这个

Intent i = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");
i.PutExtra("android.intent.extra.KEY_CONFIRM", true);
StartActivity(i);
android xamarin shutdown
3个回答
1
投票

它不起作用的原因是 Runtime.getRuntime() 仅适用于 Root 设备。

第二个代码可以工作,但并非在所有情况下都有效。您可能需要添加关机权限,您可以在here阅读该权限。同样,对于这种情况,普通应用程序无法请求此权限,您需要是系统级应用程序。


1
投票

谢谢大家,我已经在另一篇文章中读到了

我用它来立即关机

Java.Lang.Runtime.GetRuntime().Exec(new String[] { "/system/xbin/su", "-c", "reboot -p" });

0
投票

如果您的设备未安装 SU,但您的应用程序已使用固件签名证书进行签名,您可以使用它来关闭电源,无需用户交互。
上述这些解决方案实际上都不适合我。您不需要是设备所有者应用程序,但您必须拥有固件签名应用程序才能拥有适当的权限。以下适用于 Android 8.1。它必须是一个没有用户交互的 Request_Shutdown,并创建为由 AlarmManager 启动的 PendingIntent。在您的 AndroidManifest.xml 中,您必须拥有 DEVICE_POWER、SHUTDOWN 和 REQUEST_SHUTDOWN 权限。

      Intent intent = new Intent("com.android.internal.intent.action.REQUEST_SHUTDOWN"); 
            intent.PutExtra("android.intent.extra.KEY_CONFIRM", false);
          
            intent.AddFlags(ActivityFlags.ClearTop
                            | ActivityFlags.ClearTask
                            | ActivityFlags.NewTask);
            PendingIntent pendingIntent = PendingIntent.GetActivity(Application.Context, 0, intent, PendingIntentFlags.OneShot);
            AlarmManager _alarmManager = (AlarmManager)Application.Context.GetSystemService(Context.AlarmService);
            long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
            _alarmManager.Set(AlarmType.Rtc, milliseconds + 5000, pendingIntent);
© www.soinside.com 2019 - 2024. All rights reserved.