使广播接收者即使在没有服务的情况下杀死应用程序也能监听事件(Make a broadcastreceiver listening for events even when app is killed

编程入门 行业动态 更新时间:2024-10-23 05:50:30
使广播接收者即使在没有服务的情况下杀死应用程序也能监听事件(Make a broadcastreceiver listening for events even when app is killed without service)

即使应用程序被杀,我希望我的broadcastreceiver收听短信传入消息。 为了让我的BroadCastreeiver保持活力,我使用后台服务提供了我的应用程序,但使用了大量电池。 所以,我尝试了IntentService,但它似乎是广播接收者在同一时间活动中遇难。

表现:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.alpacah.persistentapp"> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:persistent="true" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name="com.alpacah.persistentapp.Main"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.alpacah.persistentapp.Handler"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </receiver> <service android:name="com.alpacah.persistentapp.ProtectIntentService"></service> </application> </manifest>

广播接收器:

package com.alpacah.persistentapp; import android.app.IntentService; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.Toast; public class Handler extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Ok", Toast.LENGTH_LONG); context.startService(new Intent(context, ProtectIntentService.class)); Log.e("BROADCASTRECEIVER", "Activated"); } }

服务:

package com.alpacah.persistentapp; import android.app.Service; import android.app.IntentService; import android.content.Intent; import android.util.Log; public class ProtectIntentService extends IntentService { public ProtectIntentService() { super("ProtectIntentService"); } @Override public void onHandleIntent(Intent intent) { Log.e("handle", "intent"); } }

I want my broadcastreceiver listenning for SMS incoming messages even when the app is killed. I maked my app using a background service for keeping alive my BroadCastreeiver but that use a lot of battery. So, I tried with IntentService but it seem the broadcastreceiver is killed in the same time of activity.

manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.alpacah.persistentapp"> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:persistent="true" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name="com.alpacah.persistentapp.Main"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.alpacah.persistentapp.Handler"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </receiver> <service android:name="com.alpacah.persistentapp.ProtectIntentService"></service> </application> </manifest>

BroadCastReceiver:

package com.alpacah.persistentapp; import android.app.IntentService; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.Toast; public class Handler extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Ok", Toast.LENGTH_LONG); context.startService(new Intent(context, ProtectIntentService.class)); Log.e("BROADCASTRECEIVER", "Activated"); } }

Service:

package com.alpacah.persistentapp; import android.app.Service; import android.app.IntentService; import android.content.Intent; import android.util.Log; public class ProtectIntentService extends IntentService { public ProtectIntentService() { super("ProtectIntentService"); } @Override public void onHandleIntent(Intent intent) { Log.e("handle", "intent"); } }

最满意答案

问题解决了; 在我的情况下,我使用的是华硕Zenphone2,而且这个预装的应用程序名为Asus Mobile Manager,它阻止了自动启动程序。 我刚刚对我的应用程序进行了自动更新,现在完美地工作。 转到华硕移动经理 - >自动化 - >自动启动管理器 - >允许您的应用程序

Problem solved; in my case I was using a Asus Zenphone2 and this one has a preinstalled app named Asus Mobile Manager that was blocking autostart programs. I just autorizd my application and now, that works perfectly. Go to Asus Mobile Manager -> Autorizations -> Auto Start Manager -> allow your app

更多推荐

本文发布于:2023-08-05 09:28:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1431206.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:接收者   也能   应用程序   情况下   事件

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!