Android設置取消系統(tǒng)鬧鐘

系統(tǒng)鬧鐘包名:com.android.deskclock

調(diào)用系統(tǒng)鬧鐘,首先在清單文件AndroidManifest.xml中添加權限:

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

設置系統(tǒng)鬧鐘:

   public static void setAlarm(Context context, String title, Date date) {
        Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM);
        intent.putExtra(AlarmClock.EXTRA_HOUR, date.getHours());
        intent.putExtra(AlarmClock.EXTRA_MINUTES, date.getMinutes());
        LogUtils.d("date.getHours() date.getMinutes()",date.getHours() +"  "+date.getMinutes());;
        if (!TextUtils.isEmpty(title)) {
            intent.putExtra(AlarmClock.EXTRA_MESSAGE, title);
            LogUtils.d(title);
        }
        intent.putExtra(AlarmClock.EXTRA_VIBRATE, true);
        intent.putExtra(AlarmClock.EXTRA_SKIP_UI, true);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
//        context.startActivity(intent);//系統(tǒng)鬧鐘數(shù)據(jù)可能會插入失敗,可以重復調(diào)用一次
    }

測試的8.0系統(tǒng)鬧鐘存在bug,設置鬧鐘顯示成功,鬧鐘列表里也能顯示,但是有些可以取消,有些取消失敗,經(jīng)過重復測試發(fā)現(xiàn),有些鬧鐘數(shù)據(jù)設置后雖然顯示正常,但是未插入數(shù)據(jù)庫,重啟設備后這些數(shù)據(jù)并不存在了,會造成取消失敗,解決辦法是,可以在設置鬧鐘的時候重復調(diào)用一次,然后測試設置和取消鬧鐘都是正常的。

取消系統(tǒng)鬧鐘:

手機等非原生系統(tǒng)鬧鐘可能會取消無效,會跳轉(zhuǎn)到鬧鐘列表頁面,需用戶手動點擊取消

    public static void cancelAlarm(Context context, String title, Date date) {
        Intent i = new Intent(AlarmClock.ACTION_DISMISS_ALARM);
        i.putExtra(AlarmClock.EXTRA_ALARM_SEARCH_MODE, AlarmClock.ALARM_SEARCH_MODE_LABEL);
        if (!TextUtils.isEmpty(title)) {//通過標簽取消
            i.putExtra(AlarmClock.EXTRA_MESSAGE, title);
            LogUtils.d(title);
        } else {//通過小時分鐘取消
           i.putExtra(AlarmClock.EXTRA_ALARM_SEARCH_MODE, AlarmClock.ALARM_SEARCH_MODE_TIME);
           i.putExtra(AlarmClock.EXTRA_IS_PM, TimeUtils.isPm(date));//其中false = AM且true = PM
           i.putExtra(AlarmClock.EXTRA_HOUR,date.getHours()>12?date.getHours()-12:date.getHours());
           i.putExtra(AlarmClock.EXTRA_MINUTES, date.getMinutes());
           LogUtils.d("date.getHours() date.getMinutes()",(date.getHours()>12?date.getHours()-12:date.getHours()) +"  "+date.getMinutes()+"  "+TimeUtils.isPm(date));
        }
           i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           context.startActivity(i);
    }

注意:設置鬧鐘小時格式是0-23,取消鬧鐘時間小時格式是0-12。

中間也曾嘗試過直接操作系統(tǒng)鬧鐘數(shù)據(jù)庫,雖然設備有root權限,但是/data/data/com.android.deskclock/databases目錄下為空,并未看到alarms.db數(shù)據(jù)庫。
后來嘗試通過ClockProvider操作:,但是會報如下錯誤:

Permission Denial: opening provider com.android.deskclock.provider.ClockProvider

查看系統(tǒng)鬧鐘源碼可以看到:

        <provider
            android:name=".provider.ClockProvider"
            android:authorities="com.android.deskclock"
            android:directBootAware="true"
            android:exported="false" />

Alarm的AndroidManifest.xml中的定義,ClockProvider定義如下:
android:exported="false",設置為不允許其他應用使用AlarmProvider,因此才報了這個異常。

AlarmClock中文APIhttps://www.apiref.com/android-zh/android/provider/AlarmClock.html#EXTRA_ALARM_SEARCH_MODE

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容