android - 从 Activity 开始和停止 broadcastReceiver

标签 android broadcastreceiver

我创建了一个广播接收器

在 list 中

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

类(class):

public class SMSMonitor extends BroadcastReceiver {
    private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent != null && intent.getAction() != null && ACTION.compareToIgnoreCase(intent.getAction()) == 0) {
            Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
            SmsMessage[] messages = new SmsMessage[pduArray.length];
            for (int i = 0; i < pduArray.length; i++) {
                messages[i] = SmsMessage.createFromPdu((byte[]) pduArray[i]);
            }
            StringBuilder bodyText = new StringBuilder();
            for (SmsMessage message : messages) {
                bodyText.append(message.getMessageBody());
            }
            String body = bodyText.toString();
            Observer.getInstance().send(new SmsEvent(body));
            abortBroadcast();
        }
    }

启动时,我的应用程序接收器开始工作。但是我在 Activity “开始”和“停止”中有 2 个按钮。我想在按下“开始”按钮时启动接收器并在按下“停止”按钮时停止。我该怎么做?

最佳答案

在开始的onClick()中调用此方法

 public void enableBroadcastReceiver()
    {
        ComponentName receiver = new ComponentName(this, SMSMonitor.class);
        PackageManager pm = this.getPackageManager();

        pm.setComponentEnabledSetting(receiver,
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);
        Toast.makeText(this, 'Enabled broadcast receiver', Toast.LENGTH_SHORT).show();
       }

在停止的onClick()中调用此方法

    // This method disables the Broadcast receiver registered in the AndroidManifest file.
    * @param view
    */
   public void disableBroadcastReceiver(){
    ComponentName receiver = new ComponentName(this, SMSMonitor class);
    PackageManager pm = this.getPackageManager();
        pm.setComponentEnabledSetting(receiver,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);
    Toast.makeText(this, 'Disabled broadcst receiver', Toast.LENGTH_SHORT).show();
   }   

关于android - 从 Activity 开始和停止 broadcastReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32753703/

相关文章:

android - 如何在库模块中导入 .aar 库文件并导出为单个库?

android - 静态 BroadcastReceiver 未收到自定义 Intent

android - 如何将 Service 与 BroadcastReceiver 结合使用?

Android:BroadcastReceiver 不会收听 BOOT_COMPLETED

java - Android - AndEngine "No Longer Touched"方法?

android - 尝试在空对象引用上调用虚拟方法 'boolean java.util.ArrayList.isEmpty()'

android - 使用协程测试改造

android - 如何更改 React Native 和 Metro Bundler 端口

android - Intent 过滤器甚至不会以编程方式注销

android - 摩托罗拉设备上的自定义权限失败