我正在创建一个关机/重启功能。
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">
但是在用户权限中出现此错误:permission is only granted to system apps
。
有什么想法吗?
答案 0 :(得分:6)
正如错误消息所述,普通应用无法获得此权限。这会带来安全风险,因为您可以构建一个使手机无法使用的应用程序。
答案 1 :(得分:3)
普通SDK应用程序无法导致手机关机或重启。只有属于固件的应用程序(即由固件主题密钥签名)才能保留适当的权限并执行这些操作。
在android SDK文档中,明确指出ACTION_SHUTDOWN
和ACTION_REBOOT
是受保护的意图,只能由系统发送“。您没有权利使用此意图出于安全原因重新启动设备。
答案 2 :(得分:0)
在我的情况下,我想在移动开关上启动我的应用程序,并在移动设备上关闭设置其状态,所以我用这种方式
<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>
在我的WifiNotification中我做了::
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equalsIgnoreCase(Intent.ACTION_BOOT_COMPLETED)
{.
.
.
}
else if(intent.getAction().equalsIgnoreCase(Intent.ACTION_SHUTDOWN))
{.
.
.
}
}
其中一项许可是::
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
答案 3 :(得分:0)
如果您的设备已植根,则可以使用此代码进行关闭
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上使用它