AlarmManager không hoạt động trong một số thiết bị


85

Ứng dụng của tôi sử dụng AlarmManager và nó đã hoạt động từ 4 năm trước. Nhưng tôi nhận thấy nó bắt đầu không thành công trong một số thiết bị.

Tôi khá chắc chắn rằng mã là đúng (Tôi đang sử dụng WakefulBroadcastReceiver và setExactAndAllowWhileIdle cho các thiết bị có Doze) vì nó hoạt động hoàn hảo trên các thiết bị Nexus, nhưng nó không thành công trong các thiết bị của một số nhà sản xuất (Huawei, Xiaomi ...).

Ví dụ, các thiết bị Huawei có một loại trình quản lý pin giết chết ứng dụng và khi một ứng dụng bị tắt, các báo thức theo lịch trình sẽ bị hủy. Vì vậy, việc đặt một ứng dụng là "được bảo vệ" trong trình quản lý pin của Huawei sẽ giải quyết được vấn đề.

Nhưng gần đây tôi nhận thấy nó không hoạt động với nhiều thiết bị hơn: Xiaomi, Samsung (có thể nó liên quan đến "Smart Manager" mới?) ... Có vẻ như hành vi này đang trở thành một tiêu chuẩn: để giết các ứng dụng nền.

Bất cứ ai biết bất cứ điều gì về nó? Bất kỳ cách nào để đảm bảo báo động được kích hoạt?

CHỈNH SỬA: Sự cố này là do "trình tiết kiệm pin" được thêm vào bởi các nhà sản xuất khác nhau. Thông tin thêm tại đây: https://dontkillmyapp.com/


8
Các nhà sản xuất đổ lỗi cho các ứng dụng về việc tiêu thụ điện năng và họ tiếp tục tiếp thị các lõi Octa ngốn nhiều pin hơn so với CPU có ít lõi hơn. Họ có nghĩ rằng chỉ cần thêm một lõi sẽ tăng tốc điện thoại của họ?
FrozenFire

1
@AviLevinshtein Có lẽ tôi đã hiểu sai câu hỏi của bạn. Tôi đang tạo báo thức trong hoạt động của mình. Sau đó, khi chuông báo thức vang lên, một bộ thu phát sóng được thực thi và cuối cùng, một WakefulIntentService (lớp từ @commonsware) được thực thi.
Sergio Viudes

2
@JFValdes Tôi vẫn đang tìm giải pháp. AlarmManager đang hoạt động hoàn hảo trên các thiết bị chạy Android Vanilla. Vấn đề là các nhà sản xuất đang cố gắng "nâng cao" các tính năng của Android, và họ đã phá vỡ AlarmManager ... Các nhà sản xuất không nên triển khai "trình tiết kiệm pin" của riêng họ, nếu họ sử dụng chế độ Doze tiêu chuẩn, thì AlarmManager sẽ hoạt động hoàn hảo ... cho một giải pháp ...
Sergio Viudes

1
Có giải pháp nào chưa? Làm thế nào để các ứng dụng khác như lời nhắc hoặc thứ gì đó làm được điều đó? Có phải là một lựa chọn hơn setAlarm, mà là dành cho báo động, không cho nhắc nhở
kv1dr

1
@SergioViudes Tôi cũng đang gặp phải vấn đề tương tự với thiết bị Xiomi để theo dõi. và nếu tôi giữ cho ứng dụng của mình không bị hạn chế tiết kiệm pin hơn là nó hoạt động bình thường ở 3 trong số 4 thiết bị bằng cách thực hiện các cài đặt sau - -> Đi tới pin -> Nguồn -> Trình tiết kiệm pin ứng dụng -> ứng dụng của bạn Bây giờ chọn không hạn chế (đối với các thiết lập nền) sau đó cho phép lựa chọn cho vị trí nền
Imran Khan Saifi

Câu trả lời:


17

Tôi đang cố gắng giải quyết nó vài tuần rồi. Tôi không tìm thấy gì cả. Huawei sẽ tắt tất cả các báo động sau một thời gian. Nếu tôi đặt ứng dụng vào ứng dụng được bảo vệ trong trình tiết kiệm pin của họ thì điều đó không giúp được gì. Nhưng nếu tôi thay đổi tên gói ứng dụng của mình để chứa các từ như báo thức, đồng hồ hoặc lịch, nó hoạt động hoàn toàn bình thường như trên bất kỳ thiết bị nào khác. Tôi không hiểu làm cách nào Google có thể cấp chứng nhận cho cái chuyện tào lao này. Tôi nghĩ rằng OEM không nên sửa đổi nền tảng cốt lõi theo cách như vậy. Tôi hiểu rằng họ có trình tiết kiệm bột của riêng ứng dụng này sẽ giết ứng dụng sau một thời gian, khi người dùng không sử dụng nó. Nhưng điều này báo động giết chết các ứng dụng được bảo vệ.

Đồng thời setAlarmClock () để báo thời gian chính xác cũng giúp ích. Nhưng không thể sử dụng điều này cho những suy nghĩ như cập nhật widget.

Cập nhật: Từ khóa bảo vệ theo tên gói đã không hoạt động trên các thiết bị Huawei hiện tại, điều này đúng vào năm 2017.


Tương tự như tôi, tôi cũng thử nó nhưng không có cách nào để giải quyết vấn đề này trên một số thương hiệu Xiaomi, Oppo, Huawei. Đôi khi chúng giết chết tiến trình nền và báo động để tiết kiệm pin.
Andi Susilo

1
Tôi có điện thoại huawei, thay đổi tên gói thành báo thức / lịch không làm gì cả. Chỉ cách để bỏ qua tiện ích này ứng dụng của bạn trong danh sách ứng dụng bảo vệ từ quản lý điện thoại
Ashish Pardhiye

9

Vấn đề là Trình quản lý thông minh. Samsung có một trình quản lý pin đôi khi vô hiệu hóa các ứng dụng nhất định chạy trong nền. Nó đã cố gắng "tiếp tục" khi quay lại ứng dụng nhưng vô hiệu hóa hoàn toàn ứng dụng hoặc có thể tiếp tục sau mỗi 5 phút hoặc lâu hơn (tùy thuộc vào cách Samsung có nó).

Điều này sẽ hoạt động trên các phiên bản Android gốc vì không có Samsung Manager. Bạn cũng có thể cài đặt phiên bản tùy chỉnh của Android có một số tính năng để kích hoạt SM (tùy thuộc vào rom).


Tôi đang phát điên lên vì tôi không có thiết bị Samsung nào để kiểm tra nó. Tôi chỉ biết những gì người dùng ứng dụng của tôi đang nói với tôi. Bạn có biết nếu vấn đề là AlarmManager không hoạt động vì ứng dụng bị giết? Hoặc vấn đề là thiết bị không thể thức dậy khi báo thức kêu là do người quản lý đó?
Sergio Viudes

@SergioViudes Gần đây, nhiều công ty đã và đang triển khai công cụ của riêng họ. Chẳng hạn như LG có một cái hoạt động tương tự như Samsung, có thể điện thoại của bạn có một cái? Vấn đề không phải là báo thức, ứng dụng báo thức bị đẩy sang trạng thái hoàn toàn không hoạt động. Smart Manager cho rằng nó chỉ là một ứng dụng ngẫu nhiên mà bạn không cần. Tôi nhận thấy một số ứng dụng có thể vượt qua nó, có thể một số ứng dụng được trình quản lý thông minh chấp nhận.
SA

1
@SergioViudes Tôi có một chiếc samsung để kiểm tra và tôi có thể nói với bạn rằng không có nhiều thứ bạn có thể nhận được từ nó. Khi trình quản lý thông minh tối ưu hóa ứng dụng của bạn, ứng dụng của bạn không có lỗi hay bất cứ điều gì, nó sẽ chết, tương tự như buộc dừng. Mặc dù vậy, nó vẫn nằm trong danh sách các ứng dụng gần đây
Tim

Cảm ơn Tim. Sẽ thật tuyệt khi giải quyết vấn đề này mà không phải loại trừ ứng dụng khỏi Trình quản lý "Thông minh".
Sergio Viudes

các thiết bị như xiaomi (miui), vivo và htc đặt một loạt các quyền là sai theo mặc định, trừ khi đó là một ứng dụng trong danh sách ứng dụng "đáng tin cậy" mà chúng dường như tự xác định (whatsapp, truecaller, v.v. được tin cậy theo mặc định ). Đây đang trở thành một lập trình cơn ác mộng
desidigitalnomad

3

Hầu hết các thiết bị Android hiện đại đều đi kèm với một ứng dụng hoặc cơ chế, tự động cố gắng tìm ra cách tiết kiệm pin và do đó có thể giết chết một số ứng dụng của bên thứ ba. Điều này có thể dẫn đến việc xóa các nhiệm vụ và công việc đã lên lịch, (ví dụ như báo thức không hoạt động, thông báo đẩy không hoạt động, v.v.) Trong nhiều trường hợp, điều này xảy ra hoàn toàn độc lập với cơ chế tiết kiệm pin của Android, trong trường hợp của tôi, tôi không thể tối ưu hóa pin hơn khi phát hiện một số kiểu thiết bị, tôi chuyển hướng người dùng đến trình quản lý khởi động để đưa ứng dụng của mình vào danh sách trắng

Bạn đã tìm thấy trong liên kết này cho mọi mô hình ý định mà bạn nên gọi https://android-arsenal.com/details/1/6771


2

Sử dụng AlarmManager cho thiết bị <5.0 và JobScheduler cho thiết bị 5.0+. Tôi không thể nói chắc rằng JobScheduler sẽ không bị ảnh hưởng bởi những trò tai quái của nhà sản xuất, nhưng với tôi thì có vẻ ít xảy ra hơn nhiều, vì Android đang cố gắng chuyển mọi người khỏi AlarmManager và chuyển sang JobScheduler.

CHỈNH SỬA: Google đã đưa ra giải pháp của bên thứ nhất cho vấn đề này được gọi là WorkManager . Nó tóm tắt nhiều khung lập lịch và sử dụng khung phù hợp nhất cho thiết bị.


2
Thật không may, không giống như lớp AlarmManager, thời gian không chính xác khi sử dụng JobScheduler. Trong ứng dụng của tôi, thời gian nên chính xác :(
Sergio Viudes

Tôi đã thử và một số trình tối ưu hóa (ít nhất là samsung) sẽ giết tất cả các tác vụ đang chờ xử lý trong JobScheduler khi màn hình tắt. Vì vậy, nó cũng bị hỏng. Điều này xảy ra trên 5.0. Sau khi cập nhật lên 6.0, nó hoạt động tốt, tôi đoán họ đã sửa điều đó. Tôi chưa thể kiểm tra nó với các nhà sản xuất khác.
Triển khai

Để biết thời gian chính xác, bạn không thể sử dụng dịch vụ nền hoặc dịch vụ đã lên lịch. Bạn có thể thử một dịch vụ nền trước, nhưng điều này sẽ tạo ra một thông báo liên tục cho người dùng (có thể là không mong muốn) và một số điện thoại có tích hợp trình diệt tác vụ sẽ tự động phá hủy dịch vụ nền trước. WorkManager là giải pháp tốt nhất nhưng tiếc là sẽ không cung cấp cho bạn thời gian chính xác.
Tom

1

Tôi cũng có một ứng dụng đặt báo thức. Giải pháp là sử dụng AlarmManager.setAlarmClock () trên api> = 21. Điều này không bị ảnh hưởng bởi doze afaik và có thêm phần thưởng là đặt biểu tượng đồng hồ báo thức vào khay hệ thống.


Cảm ơn câu trả lời của bạn. Có cách nào để loại bỏ biểu tượng đồng hồ báo thức không?
Sergio Viudes

Thật không may, setAlarmClock đôi khi không hoạt động. Tôi đã thử nghiệm nó trên thiết bị Oreo với bộ nhớ thấp.
Boris Salimov

0

hầu hết các điện thoại mới hiện nay đều được đi kèm với một số loại trình quản lý pin / tiết kiệm năng lượng có chức năng giống như bạn đã mô tả. không tính dubooster và chủ sạch sẽ.

Tôi nghĩ rằng bạn cần đặt tuyên bố từ chối trách nhiệm hoặc câu hỏi thường gặp trong danh sách cửa hàng ứng dụng / cửa hàng play của mình cho biết rằng ứng dụng này cần được đưa vào ngoại lệ của ứng dụng quản lý pin để hoạt động bình thường.


Nên có một cách khác để làm điều đó ... Người dùng sẽ không đọc tuyên bố từ chối trách nhiệm. Tôi không thể nghĩ rằng điện thoại Samsung không cho phép các ứng dụng để sử dụng AlarmManager ...
Sergio Viudes

Các báo thức sẽ không hoạt động "đúng giờ", nhưng chúng sẽ rất quan trọng
Gavriel,

Đây (đáng buồn là) câu trả lời hữu ích nhất, tôi muốn nói. Tôi ước có một giải pháp tốt hơn, nhưng các nhà sản xuất phần cứng đang làm hỏng Android vani hoạt động hoàn hảo.
caw

0

tôi đã ngừng sử dụng AlarmManager cách đây một thời gian ... một giải pháp thay thế tốt hơn và ổn định hơn

  1. tạo ra một dịch vụ
  2. đăng ký BroadcastReceiver cho BOOT_COMPLETED
  3. kích hoạt dịch vụ của bạn từ người nhận
  4. bắt đầu một Trình xử lý mới bên trong dịch vụ của bạn tự lặp lại sau mỗi X phút ( Android - chạy một phương thức định kỳ bằng cách sử dụng lệnh gọi postDelayed () )
  5. kiểm tra xem thời gian thực hiện tác vụ đã đến chưa: bây giờ - thời gian thực hiện> 0 ( Làm cách nào để tìm khoảng thời gian chênh lệch giữa hai ngày trong java? )
  6. nếu vậy .. thực hiện tác vụ và dừng trình xử lý

vâng .. đó là một nỗi đau .. nhưng công việc được hoàn thành KHÔNG CÓ VẤN ĐỀ GÌ


3
Cảm ơn đề xuất của bạn, nhưng tôi muốn tránh cách tiếp cận đó, vì sử dụng AlarmManager sẽ không tiêu tốn RAM hoặc bất kỳ tài nguyên nào. Và, nếu ứng dụng của bạn bị giết, dịch vụ sẽ dừng, phải không?
Sergio Viudes

tôi đã không nói rằng phương pháp này là BOOLETPROOF, nhưng ít nhất nó bao gồm trên các phiên bản khác nhau api :)
ymz

Để hoạt động đáng tin cậy, giải pháp này có lẽ cũng cần sử dụng khóa đánh thức và điều đó sẽ ngốn một lượng lớn pin.
Paweł Nadolski,

tôi đoán rằng bạn đúng về câu hỏi này .. câu hỏi duy nhất là: điều gì sẽ là tồi tệ nhất - mã không đáng tin cậy hoặc hiệu suất kém? dù sao, cá nhân tôi nghĩ rằng có những cách thay thế để khóa có thể phù hợp trong một số trường hợp (ví dụ: stackoverflow.com/questions/5346694/… )
ymz

0

Bạn có đang nghe BOOT_COMPLETED không? Bạn cần đặt lại báo thức khi thiết bị được khởi động lại.


Đúng. Như tôi đã nói, báo động đã hoạt động từ năm 2012, cho đến nay. Khi thiết bị được khởi động lại, tôi lập lịch báo thức lại trong bộ thu phát sóng BOOT_COMPLETED.
Sergio Viudes

1
Yêu cầu khởi động lại để ứng dụng của bạn hoạt động trở lại thậm chí không phải là một nửa giải pháp
Tim

1
@TimCastelijns đó hoàn toàn không phải những gì tôi đang nói. NẾU thiết bị được khởi động lại, tất cả các cảnh báo đã đặt bằng trình quản lý cảnh báo phải được đặt lại.
Tyler Pfaff

@TylerPfaff có nhưng việc khởi động lại thiết bị không liên quan đến vấn đề trong câu hỏi này
Tim

0

Những thiết bị này đang chạy phiên bản Android nào?

Kể từ API 23, bản thân hệ điều hành sẽ chuyển sang chế độ nhàn rỗi năng lượng thấp khi nó không được sử dụng trong một thời gian và ở chế độ đó, các cảnh báo sẽ không được gửi. Tuy nhiên, có một cách để các ứng dụng nói rõ ràng "Tôi cần báo thức này báo vào lúc này bất kể mức sử dụng pin là bao nhiêu"; các phương thức AlarmManager mới được gọi setAndAllowWhileIdle()setExactAndAllowWhileIdle().

Từ mô tả của bạn, có vẻ như đây có thể không phải là nguyên nhân cụ thể gây ra sự cố của bạn trên một số thiết bị của OEM, nhưng đây là điều mà tất cả các nhà phát triển sử dụng Trình quản lý cảnh báo phải lưu ý.

Cuối cùng, nhiều cách sử dụng của Trình quản lý báo thức được giải quyết tốt hơn bằng cách sử dụng cơ chế của Trình lập lịch công việc. Để có khả năng tương thích ngược, "Trình quản lý mạng GCM" của Dịch vụ Play thực sự rất gần với Trình lập lịch công việc về chức năng - nó sử dụng Trình lập lịch công việc nội bộ trên các phiên bản Android mới hơn - và không nhất thiết là về mạng, bất chấp tên của lớp.


Các thiết bị Samsung có Trình quản lý thông minh đang chạy Lollipop. Tôi đã sử dụng setExactAndAllowWhileIdle cho các thiết bị Marshmallow. Tôi sẽ xem qua JobScheduler và GCM. Dù sao thì, tôi không biết vấn đề là báo thức sẽ không kêu hay thiết bị đó không được đánh thức khi báo thức kêu.
Sergio Viudes

0

Tôi không nghĩ rằng việc tắt ứng dụng sẽ ngăn trình quản lý báo thức đánh thức ứng dụng của bạn.

Chỉ khi bạn "buộc dừng" hoặc tắt ứng dụng, bạn không nhận được cuộc gọi lại từ trình quản lý báo thức.

Nguyên nhân gốc rễ có thể là một cái gì đó khác.

Ngoài ra trên M ... setExactAndAllowWhileIdle thực hiện điều chỉnh ... nghĩa là nếu bạn lên lịch báo thức cứ sau 2 phút, nó sẽ không được kích hoạt. ..Cần có cửa sổ 15 phút. .


1
Cảm ơn câu trả lời của bạn. Nhưng, nếu không, tại sao ứng dụng hoạt động hoàn hảo khi "tối ưu hóa pin" bị tắt trong Trình quản lý thông minh?
Sergio Viudes

bạn đang chạy các ứng dụng trên bắt nguồn từ device..if có người quản lý ứng dụng có thể vô hiệu hóa các ứng dụng quá ..
jain rupesh

Không, tôi không chạy nó trên thiết bị đã root.
Sergio Viudes

@rupeshjain "đó là nếu bạn lên lịch báo thức 2 phút một lần, nó sẽ không được kích hoạt. .. Cần có cửa sổ 15 phút." điều này không hoàn toàn đúng, đó là một vấn đề thực sự nếu nó đúng. Bạn có thể đọc chính xác giới hạn thời gian lập lịch bên trong Tài liệu Android cho phương thức setExactAndAllowWhileIdle. Có những hạn chế về tần suất các báo thức này sẽ phát cho một ứng dụng cụ thể. Trong hoạt động bình thường của hệ thống, nó sẽ không gửi những cảnh báo này quá khoảng mỗi phút khi ở chế độ không tải công suất thấp, thời lượng này có thể dài hơn đáng kể 15 phút.
eyadMhanna

0

Đối với Xiaomi, bạn có thể cần bật Tự động khởi động cho ứng dụng của mình. Tôi đang cố gắng thực hiện một danh sách các sửa đổi Android (thường là từ nhà sản xuất điện thoại) có thể ảnh hưởng đến quá trình chạy nền. Nếu bạn có điều gì đó mới, vui lòng thêm câu trả lời tại đây Danh sách các trình diệt tác vụ Android


0

Chúng tôi cần bật ứng dụng của mình trong trình quản lý tự động khởi động trong trình quản lý ứng dụng, một số thiết bị cầm tay như vivo v5,

Trong vivo v5, chúng ta có thể tìm thấy menu này trong iManager -> App Manager -> Auto Start Manager. Kích hoạt ứng dụng của chúng tôi tại đây.

Sau đó, báo thức / trình quản lý báo thức của bạn sẽ kích hoạt báo động nếu ứng dụng bị tắt hoặc bị đóng.


0

Tôi đang tìm kiếm câu trả lời và sau vài giờ, tôi tìm thấy điều này:

https://stackoverflow.com/a/35220476/3174791

Trong sơ yếu lý lịch là cách để biết liệu ứng dụng của bạn có bị khai tử bởi 'Ứng dụng được bảo vệ' hay không và điều này chỉ hoạt động trên các thiết bị Huawei. cho tôi biết nếu có bất kỳ giải pháp nào cho các thiết bị khác (Samsung, Sony, Xiaomi, v.v.).


0

Điều này có thể là muộn nhưng tôi hy vọng nó sẽ giúp ai đó.

Tôi đã bị mắc kẹt về cùng một vấn đề quá lâu. Nhưng bây giờ tôi biết làm thế nào để giải quyết vấn đề này. Điều này dành cho bất kỳ ai có thể có cùng một vấn đề. Mọi người tiếp tục nói rằng bạn phải bật Tự động khởi động nhưng tôi đã cố gắng thành công bằng cách sử dụng tự động khởi động.

Trước hết, WakeFullBroadcastaReceiver hiện không được dùng nữa và bạn nên sử dụng BroadcastReceiver. Trước hết, bạn phải sử dụng ForegroudService thay vì BackgroundService.

Tôi sẽ cung cấp cho bạn ví dụ sau:

IntentService.class

public class NotificationService extends IntentService {


//In order to send notification when the app is close
//we use a foreground service, background service doesn't do the work.



public NotificationService() {
    super("NotificationService");
}

@Override
public void onCreate() {
    super.onCreate();

}

@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);

    //There is no difference in the result between start_sticky or start_not_sticky at the moment
    return START_NOT_STICKY;
}

@Override
protected void onHandleIntent(@Nullable Intent intent) {

    //TODO check if the app is in foreground or not, we can use activity lifecyclecallbacks for this

    startForegroundServiceT();
    sendNotification(intent);
    stopSelf();
}


/***
 * you have to show the notification to the user when running foreground service
 * otherwise it will throw an exception
 */
private void startForegroundServiceT(){

    if (Build.VERSION.SDK_INT >= 26) {
        String CHANNEL_ID = "my_channel_01";
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
                "Channel human readable title",
                NotificationManager.IMPORTANCE_DEFAULT);

        ((NotificationManager) 
   getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);

        Notification notification = new Notification.Builder(this, CHANNEL_ID)
                .setContentTitle("")
                .setContentText("").build();

        startForeground(1, notification);
    }
}

private void sendNotification(Intent intent){

    //Send notification
    //Use notification channle for android O+
}
}

khởi động dịch vụ nền trước trong BroadcastReceiver.class

public class AlarmReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {


    Intent service = new Intent(context, NotificationService.class);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        context.startForegroundService(service);
    } else {
        context.startService(service);
    }

}
}

Và setAlarms như thế này:

 public static void setAlarm(Context context, int requestCode, int hour, int minute){


    AlarmManager alarmManager =( AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context//same activity should be used when canceling the alarm
            , AlarmReceiver.class);
    intent.setAction("android.intent.action.NOTIFY");

    //setting FLAG_CANCEL_CURRENT makes some problems. and doest allow the cancelAlarm to work properly
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1001, intent, 0);

    Calendar time = getTime(hour, minute);

    //set Alarm for different API levels
    if (Build.VERSION.SDK_INT >= 23){
        alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,time.getTimeInMillis(),pendingIntent);
    }
    else{
        alarmManager.set(AlarmManager.RTC_WAKEUP,time.getTimeInMillis(),pendingIntent);
    }

Sau đó, bạn phải khai báo receiver và foregroundservice trong tệp kê khai.

       <receiver android:name=".AlarmReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.NOTIFY">

            </action>
        </intent-filter>
    </receiver>
    <service
        android:name=".NotificationService"
        android:enabled="true"
        android:exported="true"></service>

Tôi hi vọng điêu nay se giup được ai đo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.