次のようなものを使用できます。
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" }
}
これは、次の場所にあるデフォルトの時計アプリのAndroidソースコードからコピーされます。DeskClock/src/com/android/deskclock/alarms/AlarmStateManager.java
ソースコードでこの関数を検索し、同様にどのように機能するかを確認します。基本的に、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関数を呼び出します。今からアラームを鳴らすまでの時間をミリ秒単位で指定します。たとえば、2分で:
setPowerOffAlarm(context, 120000)