android - 手动启动/停止接收器并将参数传递给接收器

标签 android broadcastreceiver android-service

我的项目很简单。它有一个 activity 和一个 broadcast receiver。在我的应用程序中,我希望能够发送短信接收短信。这很好用。

但现在我想将一些数据从 View 传递到接收器。想象一个简单的复选框,我想将它的值传递给receiver

所以这是我的应用程序的基本生命周期:

  1. 启动应用
  2. 点击发送短信
  3. 接收器以参数启动并发送短信
  4. 接收者收到一条短信并停止。

接收者:

<receiver android:name=".SmsReceiver"> 
    <intent-filter android:priority="1000"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver>

Activity:
Receiver:

我试图传递一个值,但它似乎被忽略了。有什么想法吗?

最佳答案

  1. 您不能随心所欲地启动和停止BroadcastReceiverBroadcastReceiver 仅在 onReceive() 执行时有效。
  2. 要发送广播,您应该使用 sendBroadcast(this.service) 而不是 startService(this.service);
  3. 将其更改为 sendBroadcast(this.service) 后,您将收到两次 广播(第一次来自您的 sendBroadcast(),第二次来自短信管理器)。这绝对不是您想要的,因为在第一种情况下,您将能够获得 checked 参数,但不能获得 SmsMessage,在第二种情况下反之亦然。
  4. 您可以将此checked 参数存储在SharedPreferences 中,然后在onReceive()
  5. 上检索它

关于android - 手动启动/停止接收器并将参数传递给接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14211291/

相关文章:

Android eclipse - 项目名称旁边的感叹号

android - 如何增加 robospice android 中改造请求的超时时间?

android - 如何始终收听短信android

android - 在android中检测网络类型(TelephonyManager)的变化

android - 处理程序到处理程序VERSUS Messenger到Android中的Messenger通信

android - PhoneGap Android childbrowser 问题 - childbrowser.java 中的大写 C?

android - Android 中 Toast 消息的动画

android - AlarmManager 并不总是执行 BroadcastReceiver

android - 在纯服务应用程序中使用 SpeechRecognizer。在主线程上运行代码

android - 我应该在android服务的onDestroy方法中调用onCreate方法吗?