2012-08-23 37 views
8

Có bất kỳ API chính thức hoặc không chính thức hoặc bản hack để thay thế lịch mặc định (lịch Georgia) của hệ điều hành Android bằng một lịch khác (Lịch của riêng tôi) không? Bạn có thể xem danh sách các lịch trên thế giới here nếu bạn không quen với chúng.Làm cách nào tôi có thể thay thế lịch mặc định của hệ điều hành Android?

Tôi có thể ghi đè DateFormat hoặc GregorianCalendar hoặc Calendar.getInstance()?

(Được thêm vào bản chỉnh sửa) Và nó sẽ ghi đè hoàn toàn việc sử dụng lịch Gregorian, ví dụ trên màn hình khóa Android?

Cảm ơn :)

Trả lời

0

Được rồi, điều này là không thể. Mối quan tâm ban đầu của tôi là về lịch màn hình khóa có vẻ như có thể đặt một widget mới cho một loại lịch khác trên Android 4.2 nên tôi đã mất hứng thú tìm giải pháp cho vấn đề này (trong khi tôi nghĩ nó có thể bằng cách nào đó ...)!

Bây giờ tôi nghĩ giải pháp thực sự duy nhất là tự vá AOSP để sử dụng các lịch khác trong GUI mà dĩ nhiên là không liên quan đến câu hỏi này.

Edit:

Xposed framework là giấc mơ của tôi là trở thành sự thật! Về mặt lý thuyết, nó có thể thay thế bất kỳ phương pháp nào trên khung công tác Android với bất kỳ thứ gì bạn muốn. Nhưng hiện tại nó không tương thích với Android 4.4 trên this (snapshot as 11/28/2013) mà tôi hy vọng sẽ sớm được khắc phục.

4

Calendar.getInstance() không phải là API Android. Đây là API Java chuẩn. Calendar.getInstance() gọi createCalendar() với múi giờ và ngôn ngữ mặc định. Có phương pháp nhà máy getInstance() chấp nhận múi giờ, miền địa phương và cả hai. Đây là cách ảnh hưởng đến lịch đã tạo.

Ví dụ: theo như tôi biết gửi bản sao tạo tiếng địa phương của Nhật Bản là JapaneseImperialCalendar.

EDIT

Có một vài lịch được xác định trước: BuddistCalendar và lịch Nhật Bản. Và rõ ràng là mặc định GregorianCalendar. Bạn có thể thêm bạn sở hữu "tiện ích mở rộng" bằng cách sử dụng Locale.setExtension(char key, String value). Tôi chưa bao giờ làm nhưng nó sẽ hoạt động. Tuy nhiên, bạn nên khai thác mã để tự tìm ra các thông số chính xác. Chúc may mắn.

+0

Cảm ơn câu trả lời nhanh của bạn :) Nếu bạn nhìn vào nguồn Android Calendar.java, trái ngược với nguồn JDK của Lịch (http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/tip/ src/share/classes/java/util/Calendar.java), bạn không thể tìm thấy createCalendar() trên đó. đây là nguồn của phần liên quan trên nó: public static sync Calendar getInstance() {return new GregorianCalendar(); } –

+1

@EbrahimByagowi: "ghi đè phương thức này (theo một số cách thức tấn công) sẽ ảnh hưởng đến việc sử dụng lịch trong giao diện người dùng Android" - oh '$ DEITY' không. Bạn không có quyền, từ một ứng dụng SDK, để ảnh hưởng đến các ứng dụng khác trong thời trang này, vì lý do bảo mật rõ ràng. Bạn được chào đón để ngã ba Android, thay đổi hệ điều hành, chuyển đổi nó thành một ROM modded, và cài đặt trên thiết bị của sự lựa chọn của bạn, nếu bạn muốn ảnh hưởng đến tất cả các ứng dụng. – CommonsWare

+2

@EbrahimByagowi CommonsWare là 100% chính xác (như mọi khi). Nếu những gì bạn muốn là tiêm một số mã của bạn theo cách mà bất cứ khi nào bất kỳ ứng dụng nào trên thiết bị tạo lịch, chúng sẽ chạy mã của bạn để tạo lịch thay vì mặc định, sau đó những gì bạn mô tả là khá nhiều . Của bạn rõ ràng là không độc hại, nhưng không phải là những gì khuôn khổ là có để cung cấp.Bạn chỉ nhận được để viết mã mà làm việc trong khu vực của bạn, hoặc bạn viết khuôn khổ (tạo ra phiên bản của riêng bạn của Android). Có lẽ nếu bạn xây dựng lý do tại sao bạn muốn tất cả các lịch là lịch của bạn, chúng tôi có thể giúp nhiều hơn? – xbakesx

Các vấn đề liên quan