[英]Broadcast receiver is not working when application is killed
當用戶收到任何 SMS 時,我需要執行一些邏輯。 當應用程序運行時,我的廣播接收器工作正常,但如果我殺了我,那么它就不能按預期工作。
有人可以幫我弄這個嗎? 我已經嘗試了互聯網上所有可能的方法,但仍然沒有任何效果。
非常感謝你。
我的廣播接收器 class:
public class EveryDay_SMSListener extends BroadcastReceiver {
private SharedPreferences preferences;
String msgBody ="";
String msg_from;
EveryDay_DataBase mydb;
@Override
public void onReceive(Context context, Intent intent) {
Intent background = new Intent(context, EveryDay_Service.class);
context.startService(background);
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
enter code here
if (bundle != null){
try{
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for(int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
msgBody = msgBody+(msgs[i].getMessageBody()).toString();
msg_from = msgs[i].getOriginatingAddress();
}
}catch(Exception e){
}
}
}
}
}
在最新版本的 Android 中,當應用程序死機並發出廣播(對於大多數廣播標志)時,系統不會啟動應用程序。
使這項工作的一種方法,您應該使用前台服務,一些可以幫助您實現它的鏈接:
請注意,一些制造商甚至關閉了這些服務以進行電池優化,例如華為、三星……。 因此,您應該添加品牌特定代碼,以使用戶禁止電池優化和自動關閉您的應用程序的服務。
您說在清單中注冊接收器對您不起作用,因此剩下的唯一選擇是:
onCreate
中注冊 SMS 接收器(不要在 manifest 中注冊 SMS 接收器)。jobscheduler
程序這是最后一個解決方案,但如果您在應用程序終止和下一個作業調度程序工作之間不走運,您可能會丟失短信,因此您可能希望 (n) 足夠小。
更好的解決方案是擁有讀取短信權限,並且每次您的活動開始時從 android 收件箱中讀取所有短信,看看您是否丟失了任何短信。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.