【问题标题】:Android BroadcastReciever - ConceptAndroid BroadcastReciever - 概念
【发布时间】:2020-02-23 22:17:30
【问题描述】:

我试图围绕 Android BroadcastReceiver 进行思考,但没有成功。我正在尝试实现一些简单的东西:

  1. 收听收到的短信
  2. 检查号码是否保存
  3. 如果保存了就做点什么

到目前为止,我注册/创建了 BroadcastReceiver,并且能够捕获传入的消息。我是通过以下方式做到的:

public class SmsReceiver extends BroadcastReceiver {


    @Override
    public void onReceive(Context context, Intent intent) {

        if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){

        //do things
  }
 }
}

我通过以下方式在Manifest文件中注册了receiver:

 <receiver
        android:name=".SmsReceiver"
        android:permission="android.permission.BROADCAST_SMS"
        android:exported="true">

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

到目前为止一切都很好。 但是,这里有个大问题:我还创建了一个名为 'UserManager' 的类,其中包含一些基本任务,例如:添加新用户、删除用户、检查用户是否存在等。

我将用户存储在 HashMap (phoneNumber, Name) 中。

我的问题是:

  1. 如何将对象传递给我的广播接收器? (我希望能够从“UserManager”类访问 HashMap)

  2. 我发现了很多关于广播接收器的主题。他们中的一些人说有几种声明广播接收器的方法。例如,您可以按照我的方式进行操作(在清单中声明),或者您可以做更多的事情,嗯……基于上下文?就像声明它 BroadcastReceiver br = new MyBroadcastReceiver() 并向它注册 intentFilters。有什么区别?我应该使用哪一个?

  3. 有什么叫做“良好实践”的东西吗?我应该注意什么?您是否知道任何材料清楚地解释了使用广播接收器的不同方式?

【问题讨论】:

    标签: android broadcastreceiver


    【解决方案1】:
    1. 您可以使用依赖注入。或者只是在您的应用程序中保留一个类的引用,可以通过getApplicationContext 访问
    2. 不同之处在于 - 对于清单中声明的​​接收器,即使您的应用程序处于销毁状态,您也可以接收消息。如果您手动创建广播接收器,那么您必须在传递消息之前创建它。 Android 还会在清单中声明的​​接收器上强制使用一些 restriction

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多