如何将BroadcastReceiver中的信息传到Activity中

方法:在BroadcastReceiver中定义一个接口,在Activity中定义一个BroadcastReceiver的对象,采用动态注册,在Activity中定义接口中的方法并通过BroadcastReceiver对象调用该方法,具体代码如下:

自定义BroadcastReceiver:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyBroadcastReceiver extends BroadcastReceiver {
private Handle handle;
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        String msg=intent.getStringExtra("msg");
        handle.handle(msg);//调用接口中的方法

    }
    public interface Handle{        //接口定义
        public void handle(String s);
    };

public void setHandle(Handle handle)
{
    this.handle=handle;
}
}

  Activity:

import androidx.appcompat.app.AppCompatActivity;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements MyBroadcastReceiver.Handle {

private Button broad=null;
private MyBroadcastReceiver receiver;//定义广播接收器对象
private ServiceConnection serviceConnection =new ServiceConnection() {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        broad=(Button)super.findViewById(R.id.broad);

        receiver=new MyBroadcastReceiver();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.intent.action.EDIT");
        registerReceiver(receiver,intentFilter);//动态注册

        receiver.setHandle(this);
}

    broad.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent it=new Intent();
            it.setAction("android.intent.action.EDIT");

            it.putExtra("msg","广播已接收");
            MainActivity.this.sendBroadcast(it);
        }
    });
    }

    @Override
//实现接口中的方法
    public void handle(String s) {

        Toast.makeText(this,s,Toast.LENGTH_SHORT).show();
    }
    protected void onDestroy() {
                super.onDestroy();
                unregisterReceiver(receiver);     //注销广播接收器
            }
 }

注意一点就是这里要使用动态注册,不能用静态注册,因此不需要去配置AndroidMainifest.xml文件

原文地址:https://www.cnblogs.com/liuleliu/p/12269730.html

时间: 2024-10-19 17:11:30

如何将BroadcastReceiver中的信息传到Activity中的相关文章

c#.NET中日志信息写入Windows日志中解决方案

1. 目的应用系统的开发和维护离不开日志系统,选择一个功能强大的日志系统解决方案是应用系统开发过程中很重要的一部分.在.net环境下的日志系统解决方案有许多种,log4net是其中的佼佼者.在Windows2000及以上操作系统中,有一个Windows日志系统,它包括应用程序(Application)事件日志.系统(System)日志和安全(Security)日志,事件日志也可以是自定义日志.在.net Framework中也提供了相应的类和接口来使用应用程序事件日志或者自定义事件日志.使用Wi

Java 从数据库中查找信息导入Excel表格中

前端js function Excel (){ //ajax请求 $.ajax({ url : "outPutAboutShopInfo", type : "post", dataType : "json", data:{ "basicShop.shopId" : shopId, "basicShop.shopMemo" : stringType //不方便增加字段所以使用门店的一个"备注&quo

laravel5.4将excel表格中的信息导入到数据库中

1.首先在得有需要导入的文件,这个过程可以利用laravel中的文件上传功能完成, 详情可以参考laravel文档http://laravelacademy.org/post/6885.htm,这里不再多说文件上传 2.假定现在要导入到数据库的表格在 storage下面的test.xls public function daoru() { $filePath = 'storage/' . iconv('UTF-8', 'GBK', 'test') . '.xls'; $ret = []; Exc

C#_从DataTable中检索信息

C#_从DataTable中检索信息 存在于内存中的虚拟表DataTable,绑定在数据显示控件后,如果想在再检索其中某些信息,可以利用DataTable.Select方法进行检索,避免了重复的读取数据库.Select方法共有4个重载方法. 先创建一个DataTable: DataTable dt = new DataTable("Student");//DataTable对象,表名时Student //开始增加列头 dt.Columns.Add("编号",type

如何获取url中的参数并传递给iframe中的报表

在使用报表软件时,用户系统左边一般有目录树,点击报表节点就会在右侧网页的iframe中显示出报表,同时点击的时候也会传递一些参数给网页,比如时间和用户信息等.如何使网页中的报表能够获取到传递过来的参数呢?以下用报表软件FineReport简单介绍一些. 具体实现过程 将报表生成页面时,给网页添加onload事件,首先获取url中的参数,然后嫁接到iframe的src上,或者通过获得的参数拼接处完整的报表url赋给iframe的src. <html> <head> <title

几个数据库的小案例(一):将文本文件中的信息导入数据库的表中

从文本文件添加到数据库用户表的记录(有两个文件:frmMain.cs  SqlHelper.cs  ) //FrmMain.cs//作者:Meusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Fo

工作中图片上传遇到的一个问题

同事需要调用我开发的一个图片上传接口,我把接口文档以及调用示例全部给了他,结果他调不成功,向我请教. 一步步调试,最终结果定位到他图片上传到本地时就失败了.打印出$_FILES数组,error提示给出的是7 查看手册,是写入磁盘失败.首先想法是上传临时文件夹失败. 去php.ini中查看临时文件夹,发现没有设置,其实默认就是/tmp目录了,修改一下临时文件夹,设置成/tmp,重启php-fpm,打开phpinfo,看到临时文件夹为/tmp 再上传,还是报同样的错误.为啥写入失败呢?难道满了? 果

[js]uploadify结合jqueryUI弹出框上传,js中的冒出的bug,又被ie坑了

引言 最近在一个项目中,在用户列表中需要对给没有签名样本的个别用户上传签名的样本,就想到博客园中上传图片使用弹出框方式,博客园具体怎么实现的不知道,只是如果自己来弄,想到两个插件的结合使用,在弹出框中使用uploadify插件进行上传,每次都会报错很是无语,最后找到解决方案,这里记录一下,算是对工作中遇到的bug的一个总结. bug 这是vs调试状态下,显示的信息.在浏览器端,点击第一次上传按钮,正常,将弹出框关闭后,第二次打开,就会出现问题: 第一次单击上传: 第二次,关闭弹出框,再次单击上传

shuffle过程中的信息传递

Spark中的shuffle大概是这么个过程:map端把map输出写成本地文件,reduce端去读取这些文件,然后执行reduce操作. 那么,问题来了: reducer是怎么知道它的输入在哪呢? 首先,mapper在写完文件之后,肯定能提供与它的输出相关的信息.这个信息,在Spark中由MapStatus表示 private[spark] sealed trait MapStatus { def location: BlockManagerId def getSizeForBlock(redu