Jalena Blog

  • 首页
  • 程序开发
    • Java
    • Spring
    • SpringBoot
    • SpringMvc
    • Python
    • Odoo
    • C#
    • SQL
    • Web
    • Linux
  • 移动设备
    • Android
    • Router
  • 杂七杂八
    • 我的废话
    • 音频
    • 视频
    • 常用软件
  • 关于
  1. 首页
  2. 软件开发
  3. Android
  4. 正文

Android BroadcastReceiver 全局广播监听

2024-08-15

在开发安卓的过程中,用户使用的PDA支持扫描识别,那么就需要监听厂家实现的广播事件,然后在Activity中注册广播及销毁广播是个繁琐的操作,因此封装了这个全局广播。

package com.youvigo.wms.components.broadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import com.youvigo.wms.data.backend.repository.LocalRepository;
import com.youvigo.wms.exception.ReceiverException;
import org.apache.commons.lang3.StringUtils;
import timber.log.Timber;

import java.util.function.Consumer;

public class GlobalReceiver extends BroadcastReceiver implements DefaultLifecycleObserver {

	private static final String TAG = GlobalReceiver.class.getSimpleName();

	private Context context;
	private IntentFilter intentFilter;

	private Consumer<String> successHandler;
	private Consumer<Throwable> errorHandler;

	@Override
	public void onReceive(Context context, Intent intent) {
		final String scanResult = intent.getStringExtra(LocalRepository.getInstance()
				.getBroadcastData());

		if (StringUtils.isBlank(scanResult)) {
			if (null != errorHandler) {
				errorHandler.accept(new ReceiverException("未能正确获取扫描数据,请检查扫描设置是否正确。"));
			}
		} else {
			if (null != successHandler) {
				String chompStr = StringUtils.chomp(scanResult);
				String deletedWhitespace = StringUtils.deleteWhitespace(chompStr);

				successHandler.accept(deletedWhitespace);
			}
		}

	}

	public GlobalReceiver setLifecycleOwner(@Nullable LifecycleOwner lifecycleOwner) {
		if (null != lifecycleOwner) {
			lifecycleOwner.getLifecycle()
					.addObserver(this);
		}
		return this;
	}

	public GlobalReceiver setContext(Context context) {
		this.context = context;
		return this;
	}

	public GlobalReceiver setIntentFilter(IntentFilter filter) {
		this.intentFilter = filter;
		return this;
	}

	public GlobalReceiver setSuccessHandler(Consumer<String> successHandler) {
		this.successHandler = successHandler;
		return this;
	}

	public GlobalReceiver setErrorHandler(Consumer<Throwable> errorHandler) {
		this.errorHandler = errorHandler;
		return this;
	}

	@Override
	public void onCreate(@NonNull LifecycleOwner owner) {
		DefaultLifecycleObserver.super.onCreate(owner);
		Timber.tag(TAG)
				.i("onCreate");
	}

	@Override
	public void onDestroy(@NonNull LifecycleOwner owner) {
		DefaultLifecycleObserver.super.onDestroy(owner);
		Timber.tag(TAG)
				.i("onDestroy");
	}

	@Override
	public void onPause(@NonNull LifecycleOwner owner) {
		DefaultLifecycleObserver.super.onPause(owner);
		unRegisterReceiver();
		Timber.tag(TAG)
				.i("onPause");
	}

	@Override
	public void onResume(@NonNull LifecycleOwner owner) {
		DefaultLifecycleObserver.super.onResume(owner);
		registerReceiver();
		Timber.tag(TAG)
				.i("onResume");
	}

	@Override
	public void onStart(@NonNull LifecycleOwner owner) {
		DefaultLifecycleObserver.super.onStart(owner);
		Timber.tag(TAG)
				.i("onStart");
	}

	@Override
	public void onStop(@NonNull LifecycleOwner owner) {
		DefaultLifecycleObserver.super.onStop(owner);
		Timber.tag(TAG)
				.i("onStop");
	}

	/**
	 * 广播注册
	 */
	private void registerReceiver() {
		if (null != context && null != intentFilter) {
			ContextCompat.registerReceiver(context, this, intentFilter, ContextCompat.RECEIVER_EXPORTED);
		}
	}

	private void unRegisterReceiver() {
		try {
			context.unregisterReceiver(this);
		} catch (Exception e) {
			if (null != errorHandler) {
				errorHandler.accept(e);
			}
		}
	}


}

使用

在Activity中注入即可

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);

	new GlobalReceiver().setContext(this)
			.setLifecycleOwner(this)
			.setIntentFilter(new IntentFilter("广播字段"))
			.setSuccessHandler(this::addCode)
			.setErrorHandler(err -> showToast(this, err.getMessage()));

}
标签: Android
最后更新:2024-12-22

Jalena

原创内容,转载请注明出处! 部分内容来自网络,请遵守法律适用!

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

【腾讯云】云服务器特惠热卖中
文章目录
  • 使用
标签聚合
java Centos odoo 其他 生活 wordpress docker MySql
分类
  • Android / 4篇
  • C# / 10篇
  • Codec / 9篇
  • Conversion / 14篇
  • Editing / 16篇
  • Java / 47篇
  • Javascript / 3篇
  • Linux / 29篇
  • Odoo / 25篇
  • Python / 6篇
  • SQL / 30篇
  • Web / 3篇
  • Windows / 4篇
  • 我的日记 / 10篇
  • 杂七杂八 / 93篇
  • 软件开发 / 72篇
  • 非线性编辑 / 1篇

COPYRIGHT © 2026 Jalena Blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备17025376号