Ras*_*art 51 android broadcastreceiver
我正在监控收到的短信.
我的应用程序与a完美配合BroadcastReceiver.但它是从一个Activity开始工作,并希望一直保持BroadcastReceiver运行(而不仅仅是我的Activity运行时).
我怎样才能做到这一点?我已经查看了生命周期,BroadcastReceiver但文档中提到的所有内容都是生命周期仅限于onReceive方法,而不是保持BroadcastReceiver检查传入SMS 的生命周期.
我怎么能坚持这个?
谢谢
Jav*_*tor 145
您需要在清单中使用操作名称android.intent.action.BOOT_COMPLETED定义接收器.
<!-- Start the Service if applicable on boot -->
<receiver android:name="com.prac.test.ServiceStarter">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
确保还包括已完成的引导权限.
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
Run Code Online (Sandbox Code Playgroud)
使用服务可以使任何事情持续存在.如果系统启动,则使用接收器接收Boot Up事件以重新启动服务.
启动时启动服务的代码.Make Service负责检查短信或任何你想要的东西.你需要做自己的工作来MyPersistingService定义自己.
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class ServiceStarter extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent("com.prac.test.MyPersistingService");
i.setClass(context, MyPersistingService.class);
context.startService(i);
}
}
Run Code Online (Sandbox Code Playgroud)
服务或引导已完成不是强制性的
实际上,您不需要实现Service或注册android.intent.action.BOOT_COMPLETED
一些示例显示了如何在BroadcastReceiver创建和销毁活动时注册/取消注册.但是,这对于仅在打开应用程序时期望的意图(例如,用于Service/Activity之间的内部通信)非常有用.
但是,如果是SMS,您希望始终收听意图(而不仅仅是在打开应用程序时).
还有另一种方式
您可以创建一个class扩展BroadcastReceiver并注册到所需意图的通道AndroidManifest.xml.这样,BroadcastReceiver将独立于您的活动(并且不依赖于活动的生命周期)
这样,BroadcastReceiver即使您的应用已关闭,只要短信到达,您就会自动通知您.
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest>
...
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<application>
....
<receiver android:name=".MyCustomBroadcastReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
MyCustomBroadcastReceiver.java
public class MyCustomBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent != null) {
String action = intent.getAction();
if(action != null) {
if(action.equals("android.provider.Telephony.SMS_RECEIVED")) {
// DO YOUR STUFF
} else if (action.equals("ANOTHER ACTION")) {
// DO ANOTHER STUFF
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
笔记
您可以将其他意图过滤器添加到AndroidManifest并在其中处理所有这些过滤器BroadcastReceiver.
仅在执行长任务时才启动服务.您只需要显示通知或更新某个数据库,只需使用上面的代码即可.
| 归档时间: |
|
| 查看次数: |
69721 次 |
| 最近记录: |