Я пишу приложение для Android, которое прослушивает входящие текстовые сообщения, а затем синхронизируется с серверной частью. Пока приложение работает нормально, но через некоторое время приложение не получает никаких входящих сообщений, если только я снова не открою приложение. Изучили различные варианты, предлагающие реализовать JobService или просто сервис, но чем больше исследований я делаю, тем больше запутываюсь. Что касается JobService, я вижу, что он предназначен только для планирования работы через некоторое время, и служба может быть уничтожена после завершения работы. Мне нужна помощь, чтобы найти лучший способ решить это. Ниже мой код для класса приемника вещания;
открытый класс MessageReceiver extends BroadcastReceiver {
private static MessageListener messageListener;
Handler mHandler;
private static final String TAG = "MessageReceiver";
public MessageReceiver() {
}
@TargetApi(Build.VERSION_CODES.M)
@Override
public void onReceive(final Context context, Intent intent) {
if (Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(intent.getAction())) {
final Bundle data = intent.getExtras();
HandlerThread bgHandlerThread=new HandlerThread("MyCoolBackgroundThread");
bgHandlerThread.start();
mHandler=new Handler(bgHandlerThread.getLooper());
Runnable backgroundRunnable = new Runnable() {
@Override
public void run() {
passReceivedMsg(data);
}
};
mHandler.post(backgroundRunnable);
}
}
Я реализовал интерфейс, в котором я передаю полученный объект TextMessage,
private void passReceivedMsg(final Bundle bundleData) {
if (bundleData !=null ){
try {
final Object[] pdusObj = (Object[]) bundleData.get("pdus");
if (pdusObj != null) {
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage =
SmsMessage.createFromPdu((byte[]) pdusObj[i]);
Log.d(TAG, "run: currentMessage: "+currentMessage);
messageListener.getReceivedMessage(currentMessage);
Log.d(TAG, "handleMessage: message "+currentMessage);
}
}
}
catch (Exception e){
Log.d(TAG, "onReceive: Error occurred "+e);
}
}
}
public static void bindListener (MessageListener listener){
messageListener = listener;
}
MessageListener, как показано ниже;
public interface MessageListener {
void getReceivedMessage(SmsMessage message);
}
Ниже мой манифест
<receiver
android:name=".utils.MessageReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>