cuốn sách gpt4 ai đã làm

[Android] Đồng hồ báo thức tắt ứng dụng Google PowerOffAlarm phân tích mã nguồn và nhận ra bật và tắt theo lịch trình

In lại Tác giả: Sahara Thời gian cập nhật: 2024-12-14 14:47:52 56 4
mua khóa gpt4 Nike

Lời nói đầu

RTC

RTC là Đồng hồ thời gian thực. Các chức năng chính của nó là:

  1. Bảo trì thời gian: RTC vẫn có thể duy trì chức năng hẹn giờ khi mất điện để đảm bảo tính liên tục của thời gian.
  2. Hiển thị và cài đặt thời gian: RTC có thể cung cấp cho hệ thống các thông tin như năm, tháng, ngày, giờ, phút, giây, v.v. Hệ thống cũng có thể hiệu chỉnh thời gian RTC thông qua giao diện để đảm bảo độ chính xác.

Tắt NguồnBáo Động

PowerOffAlarm là một ứng dụng hoặc thành phần liên quan đến chức năng cảnh báo tắt máy của hệ thống Android. Khi người dùng đặt đồng hồ báo thức tắt máy, nó sẽ gửi phát đồng hồ báo thức tắt máy đến PowerOffAlarm và chuyển các tham số thời gian báo thức. Sau khi nhận được phát sóng, PowerOffAlarm ghi thời gian vào đồng hồ thời gian thực (RTC) theo mức cài đặt trước. thời gian khởi động và thời gian báo thức và ghi thời gian vào một tập tin để lưu trữ tạm thời. Theo mặc định, thời gian được sử dụng là thời gian ở múi giờ hiện tại. Nếu dấu thời gian đến ở múi giờ khác thì cần điều chỉnh theo dấu thời gian ở múi giờ hiện tại.

múi giờ

Múi giờ là các khu vực được phân chia để phù hợp với sự khác biệt về thời gian ở các vùng khác nhau do chuyển động quay của trái đất gây ra.

chữ

Phân tích mã nguồn

Đồng hồ báo thức tắt máy PowerOffAlarm Đường dẫn mã nguồn: nhà cung cấp/qcom/độc quyền/PowerOffAlarm/src/com/qualcomm/qti/poweroffalarm.

Trước tiên hãy xem mã nguồn của bộ thu phát sóng liên quan đến đồng hồ báo thức tắt máy trong AndroidManifest.xml:

              

Để biết logic của việc đặt cảnh báo tắt máy và hủy cảnh báo tắt máy, hãy theo dõi mã nguồn của PowerOffAlarmBroadcastReceiver: \vendor\qcom\propetary\PowerOffAlarm\src\com\qualcomm\qti\poweroffalarm\PowerOffAlarmBroadcastReceiver.java.

/************************************************* ***************************** @file PowerOffAlarmBroadcastReceiver.java @brief Nhận hành động "org.codeaurora.poweroffalarm.action.SET_ALARM" tới đặt cảnh báo tắt nguồn và nhận hành động "org.codeaurora.poweroffalarm.action.CANCEL_ALARM" để hủy cảnh báo. **************************************************** */ lớp công khai PowerOffAlarmBroadcastReceiver mở rộng BroadcastReceiver { // Đặt hành động để hủy cảnh báo tắt riêng tư tĩnh cuối cùng Chuỗi ACTION_SET_POWEROFF_ALARM = "org.codeaurora.poweroffalarm.action.SET_ALARM" // Đặt hành động để hủy cảnh báo tắt riêng tư tĩnh cuối cùng Chuỗi ACTION_CANCEL_POWEROFF_ALARM = "org.codeaurora .poweroffalarm.action. CANCEL_ALARM"; //Thêm ý định đặt đồng hồ báo thức tắt máy khóa riêng tĩnh cuối cùng Chuỗi TIME = "time"; //Đặt hoặc hủy báo thức nếu (ACTION_SET_POWEROFF_ALARM.equals(action)) //Đặt hành động báo thức dài AlarmTime = Intent.getLongExtra(TIME, PowerOffAlarmUtils.DEFAULT_ALARM_TIME);// Lấy ra Dấu thời gian cần đặt dài AlarmInPref = PowerOffAlarmUtils.getAlarmFromPreference(context);//Lấy dấu thời gian đã đặt trước đóLog.d(TAG, "Đặt báo thức tắt nguồn: thời gian báo thức " + AlarmTime + " thời gian trong pref " + AlarmInPref); PowerOffAlarmUtils.saveAlarmToPreference(context, AlarmTime) ;/ /Lưu dấu thời gian mới dài báo độngTimeToRtc = PowerOffAlarmUtils.setAlarmToRtc(alarmTime);//Thời gian được chuyển đổi thành RTC if (alarmTimeToRtc != FAILURE) {//Đó là thời gian hợp pháp detectData.setAlarmTime(alarmTime); PersistData.setAlarmStatus(PowerOffAlarmUtils.ALARM_STATUS_TO_FIRE); PersData.setSnoozeTime(PowerOffAlarmUtils.DEFAULT_ALARM_TIME); PersistData.writeDataToFile();//Thời gian RTC đã đặt sẽ được lưu trữ trong tệp PowerOffAlarmUtils.saveRtcAlarmToPreference(context, AlarmTimeToRtc); (ACTION_CANCEL_POWEROFF_ALARM.equals(action)){//Hủy hành động cảnh báo dài AlarmTime = Intent.getLongExtra(TIME, PowerOffAlarmUtils.DEFAULT_ALARM_TIME);//Lấy dấu thời gian cảnh báo cần hủy dài AlarmInPref = PowerOffAlarmUtils.getAlarmFromPreference(context);// Nhận Dấu thời gian được đặt trước if (alarmTime == AlarmInPref) //Nếu nó giống với dấu thời gian đã đặt trước đó, bạn có thể hủy báo thức đã đặt PowerOffAlarmUtils.saveAlarmToPreference(context, PowerOffAlarmUtils.DEFAULT_ALARM_TIME); PowerOffAlarmUtils.saveRtcAlarmToPreference(context, PowerOffAlarmUtils.DEFAULT_ALARM_TIME); PowerOffAlarmUtils.cancelAlarmInRtc(); if (rtc < 0) { Log.d(TAG, "Hủy thời gian báo thức trong rtc không thành công "); } PersistData.setAlarmStatus(PowerOffAlarmUtils.ALARM_STATUS_NONE); PersistData.setAlarmTime(PowerOffAlarmUtils.DEFAULT_ALARM_TIME); PersistData.writeDataToFile();

Cuối cùng, mã nguồn của PowerOffAlarmUtils được truy tìm đến: \vendor\qcom\propetary\PowerOffAlarm\src\com\qualcomm\qti\poweroffalarm\PowerOffAlarmUtils.java.

/** * Đặt thời gian báo thức cho thanh ghi rtc * * @param thời gian báo thức dựa trên thời gian hiện tại (ms) * @return set result -- Thất bại, trả về THẤT BẠI; * trả về thời gian báo thức về rtc */ public static Final dài MS_IN_ONE_MIN = 60000L;//Dài cuối cùng tĩnh riêng tư một phút SEC_TO_MS = 1000L;//Chuyển đổi giây thành mili giây tĩnh dài công khai setAlarmToRtc(dài AlarmTime/*Dấu thời gian của thời gian trong tương lai*/) { long currentTime = System.currentTimeMillis();//Dấu thời gian của thời gian hiện tại dài AlarmInRtc = getAlarmFromRtc(); long rtcTime = getRtcTime(); // MS_IN_ONE_MIN được hệ thống đặt trước Thời gian bật nguồn lâu dàiDelta = thời gian báo thức - thời gian hiện tại - MS_IN_ONE_MIN;//Nhận sự khác biệt giữa dấu thời gian hiện tại và tương lai (đơn vị: ms) // báo thức trong hai phút không được hỗ trợ if (timeDelta <= 0) { Log.d(TAG, "setAlarmToRtc failed: thời gian báo thức là một phút" //Nếu thời gian cài đặt quá ngắn, sẽ báo lỗi; sẽ được trả về } dài AlarmTimeToRtc = timeDelta / SEC_TO_MS + rtcTime;//Tính thời gian RTC để đánh thức máy (đơn vị: ms) thử { IAlarm mProxy = IAlarm.getService(); int ret = mProxy.setAlarm(alarmTimeToRtc);//Đặt thời gian RTC if (ret == THÀNH CÔNG) //Đặt thành công return AlarmTimeToRtc } else { return FAILURE;//Đặt thất bại} } bắt ( Ngoại lệ e) { Log.d(TAG, e.toString()); trả về LỖI; }

Đối với mã nguồn của chương trình phát sóng tắt máy, trước tiên hãy theo dõi mã nguồn: \vendor\qcom\propetary\PowerOffAlarm\src\com\qualcomm\qti\poweroffalarm.java.

lớp công khai PowerOffAlarmDialog mở rộng Hoạt động{ lớp tĩnh công khai ShutDownReceiver mở rộng BroadcastReceiver { @Override public void onReceive(final Context context, Intent Intent) { PowerOffAlarmUtils.powerOff(context);//Shutdown} } }

Sau đó truy tìm PowerOffAlarmUtils.java:

chuỗi tĩnh cuối cùng ACTION_REQUEST_SHUTDOWN = "com.android.internal.intent.action.REQUEST_SHUTDOWN"; public static void powerOff(Context context) { //Nếu bạn muốn sử dụng trực tiếp chức năng này, ứng dụng phải là một ứng dụng hệ thống và có các quyền sau: // Ý định requestShutdown = new Intent(ACTION_REQUEST_SHUTDOWN); requestShutdown.putExtra(EXTRA_KEY_CONFIRM, false);//true là cửa sổ bật lên hỏi, sai là tắt trực tiếp mà không có cửa sổ bật lên requestShutdown.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ); }

Dự án chiến đấu thực tế

Đặt báo thức tắt máy.

chuỗi cuối cùng tĩnh công khai POWER_OFF_ALARM_PACKAGE = "com.qualcomm.qti.poweroffalarm"; chuỗi cuối cùng tĩnh riêng tư dài MS_IN_ONE_MIN = 6000L /** * Đặt báo thức tắt máy và bật máy tính khi đạt đến dấu thời gian định trước* * @param mContext context* @param millis Dấu thời gian trong tương lai*/ public static void startPowerOnAlarm(Context mContext, long millis) {//Khởi động Ý định ý định = Ý định mới(Constants.ACTION_SET_POWEROFF_ALARM); ý định.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); ý định.setPackage(POWER_OFF_ALARM_PACKAGE); thời gian dài = millis + MS_IN_ONE_MIN; ý định.putExtra("thời gian", thời gian); mContext .sendBroadcast(ý định); }

Hủy báo động tắt máy.

public static Final String ACTION_CANCEL_POWEROFF_ALARM = "org.codeaurora.poweroffalarm.action.CANCEL_ALARM"; * Hủy cảnh báo tắt, hủy cảnh báo được đặt ở dấu thời gian millis* * @param mContext context* @param millis Dấu thời gian của cảnh báo đã bị hủy */ public static void cancelAlarm(Context mContext, long millis) { Ý định = mới Ý định(ACTION_CANCEL_POWEROFF_ALARM); ý định.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); ý định.setPackage(POWER_OFF_ALARM_PACKAGE); millis += MS_IN_ONE_MIN; ý định.putExtra("thời gian", millis);

Chức năng tắt máy.

public static void startShutDown(Context mContext) //Tắt Intent Intent = new Intent("org.codeaurora.poweroffalarm.action.ALARM_POWER_OFF"); Intent.setPackage(POWER_OFF_ALARM_PACKAGE); Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); sendBroadcast (ý định); // Nó cũng có thể được triển khai bằng mã sau, nhưng nó phải là một ứng dụng hệ thống có các quyền sau: //  // String action = "com .android.internal .intent.action.REQUEST_SHUTDOWN"; // if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.N){ // hành động = "android.intent.action.ACTION_REQUEST_SHUTDOWN"; // } // Ý định = ý định mới (hành động); // ý định.putExtra("android.intent.extra.KEY_CONFIRM", sai // ý định.setFlags(Ý định) .FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); ý định.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // mContext.startActivity(ý định }

Cuối cùng, bài viết này về [Android] Đồng hồ báo thức tắt ứng dụng Google Phân tích mã nguồn PowerOffAlarm và triển khai bật và tắt theo lịch trình có tại đây. Nếu bạn muốn biết thêm về [Android] Đồng hồ báo thức tắt ứng dụng Google PowerOffAlarm, phân tích và triển khai mã nguồn theo lịch trình. tắt máy Để biết thông tin về cách bật và tắt, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

56 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress