您可以使用以下类似的内容:
您可以像下面这样使用:
private val ACTION_SET_POWEROFF_ALARM = "org.codeaurora.poweroffalarm.action.SET_ALARM"
private val ACTION_CANCEL_POWEROFF_ALARM = "org.codeaurora.poweroffalarm.action.CANCEL_ALARM"
private val POWER_OFF_ALARM_PACKAGE = "com.qualcomm.qti.poweroffalarm"
private val TIME = "time"
private fun setPowerOffAlarm(context: Context, timeInMillis: Long) {
val intent = Intent(ACTION_SET_POWEROFF_ALARM)
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND)
intent.setPackage(POWER_OFF_ALARM_PACKAGE)
val rightNow = Calendar.getInstance()
rightNow.set(Calendar.SECOND, 0);
rightNow.set(Calendar.MILLISECOND, 0);
intent.putExtra(TIME, rightNow.timeInMillis + timeInMillis)
context.sendBroadcast(intent)
Log.i { "PWR STATE: pwr off Alarm is set" }
}
这是从位于
DeskClock/src/com/android/deskclock/alarms/AlarmStateManager.java
的默认时钟应用程序的Android源代码中复制的。
在源代码中搜索此函数并查看它们如何执行类似操作。我们基本上向
com.qualcomm.qti.poweroffalarm
包发送广播,该包将创建一个关机闹钟,就像您在DeskClock应用程序中所做的那样。
如果我们查看
com.qualcomm.qti.poweroffalarm
的反编译源代码,我们会发现清单声明大致如下:
<receiver android:name="com.qualcomm.qti.poweroffalarm.PowerOffAlarmDialog$ShutDownReceiver" android:permission="org.codeaurora.permission.POWER_OFF_ALARM">
<intent-filter>
<action android:name="org.codeaurora.poweroffalarm.action.ALARM_POWER_OFF"/>
</intent-filter>
</receiver>
这意味着我们需要此权限,以便qcom包接受广播的意图。因此,我们在AndroidManifest.xml文件中进行了设置:
<uses-permission android:name="org.codeaurora.permission.POWER_OFF_ALARM" />
然后也请求它:
private val PERMISSION_POWER_OFF_ALARM = "org.codeaurora.permission.POWER_OFF_ALARM"
private val CODE_FOR_ALARM_PERMISSION = 1
if (ContextCompat.checkSelfPermission(this, PERMISSION_POWER_OFF_ALARM)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
arrayOf(PERMISSION_POWER_OFF_ALARM), CODE_FOR_ALARM_PERMISSION);
}
最后我们想要调用SetAlarm函数。我们指定从现在起到闹钟响起的时间,以毫秒为单位。例如,在两分钟内:
setPowerOffAlarm(context, 120000)