在android中获得关机或重启权限

在android中获得关机或重启权限,android,permissions,Android,Permissions,我正在创建关闭/重新启动功能 Intent intent = new Intent(); intent.setAction("android.intent.action.ACTION_SHUTDOWN"); sendBroadcast(intent); 在xml中: <uses-permission android:name="android.permission.SHUTDOWN"/> <manifest xmlns:android="

我正在创建关闭/重新启动功能

    Intent intent = new Intent();  
    intent.setAction("android.intent.action.ACTION_SHUTDOWN");  
    sendBroadcast(intent); 
在xml中:

<uses-permission  android:name="android.permission.SHUTDOWN"/>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="org.crazyit.net"
  android:versionCode="1"
  android:versionName="1.0" 
  android:sharedUserId="android.uid.system">

但它在用户权限中有以下错误:
权限仅授予系统应用程序


有什么想法吗?

正如错误消息所解释的,普通应用程序无法获得此权限。这将是一个安全风险,因为您可能会构建一个使手机变得无用的应用程序。

普通SDK应用程序无法导致手机关闭或重新启动。只有作为固件一部分的应用程序(即,由固件sining密钥签名)才能拥有适当的权限并执行这些操作


android SDK文档中明确指出,
ACTION\u SHUTDOWN
ACTION\u REBOOT
是受保护的意图,只能由系统发送“。出于安全原因,您无权使用此意图重新启动设备。

在我的情况下,我希望在手机上启动我的应用程序,并将其状态设置为手机已关闭,因此我以这种方式使用。”

 <receiver android:name="WifiNotification" android:enabled="true" android:permission="android.permission.CHANGE_WIFI_STATE">
        <intent-filter >
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
            <action android:name="android.net.wifi.SCAN_RESULTS"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
        <intent-filter >
            <action android:name="android.intent.action.ACTION_SHUTDOWN"/>
        </intent-filter>
    </receiver> 
其中一个权限是::

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

如果您的设备是根设备,您可以使用此代码关机

Java.Lang.Runtime.GetRuntime().Exec(new String[] { "/system/xbin/su", "-c", "reboot -p" });
并使用此代码重新启动

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

我在Xamarin.Android上使用这个

谢谢您的许可参考。Android的Intent.ACTION\u SHUTDOWN的文档出于某种原因没有提到它……这是真的,但不是很有帮助。如何获得这样的许可?例如,在构建COSU应用程序时,这将非常有用。@StephenM它需要一个自定义的Android构建,其中包含作为系统应用程序的应用程序。
Java.Lang.Runtime.GetRuntime().Exec(new String[] { "/system/xbin/su", "-c", "reboot now" });