Android BroadcastReciever-概念

问题描述 投票:0回答:1

我曾试图绕过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
  }
 }
}

我通过以下方式在清单文件中注册了接收者:

 <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中(电话号码,名称)。

我的问题是:

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

  2. 我发现了许多有关BroadcastReceivers的主题。他们中的一些人说,有两种声明广播接收器的方法。例如,您可以像我一样做(在清单中声明),或者可以做更多……基于上下文?就像将其声明为BroadcastReceiver br = new MyBroadcastReceiver()并向其注册intentFilters一样。有什么区别?我应该使用哪一个?

  3. 是否有所谓的“良好实践”?我要注意些什么?您是否知道任何材料可以清楚地说明使用broadcastReceiver的不同方式?
android broadcastreceiver
1个回答
0
投票
  1. 您可以使用依赖项注入。或者只是保留对您的应用程序中的类的引用,可以通过getApplicationContext
  2. 访问
  3. 差异是-对于清单中声明的​​接收者,即使您的应用处于销毁状态,您也可以接收消息。如果广播接收器是手动创建的,那么您必须在发送消息之前先创建它。同样,Android会在清单中声明的​​接收器上强制使用某些restriction
© www.soinside.com 2019 - 2024. All rights reserved.