精华内容
下载资源
问答
  • 发送广播一般用于相隔多个页面发送通知或者传值的时候用(如果不了解建议先去看一下对广播的介绍)。... //注册并发送广播发送广播的地方)(意图:往mainactivity中发送广播并传值,为TextView设置内容)  ...

    发送广播一般用于相隔多个页面发送通知或者传值的时候用(如果不了解建议先去看一下对广播的介绍)。

    1.第一种发送广播的方式

    写在需要发送广播的地方(如果不传值两行代码就可以搞定,很简单):

           String str = "需要传的内容";
            //注册并发送广播(写在发送广播的地方)(意图:往mainactivity中发送广播并传值,为TextView设置内容)
           Intent intent = new Intent("click_position");
           //广播传值(不需要传值可以不用写)
           intent.putExtra("string", str);
           LocalBroadcastManager.getInstance(MainActivity.this).sendBroadcast(intent);

    写在接收广播的地方:

            //注册广播机制,接收传来的广播(意图:接收来自mainAdapter传来的广播以及值,用于为TextView设置内容)
            LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(MainActivity.this);
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction("click_position");
            BroadcastReceiver mItemViewListClickReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
    //接收由发送广播的界面传来的值(没有传值不用写)
                    String str = intent.getStringExtra("string");
    //接收到广播之后需要处理的事情
                    titleView.setText(str);
                }
            };
            broadcastManager.registerReceiver(mItemViewListClickReceiver,intentFilter);

    2.第二种发送广播的方式

        写在需要发送广播的地方(发送两条广播写在不同的类中)

                    //发送广播
                    Intent intent = new Intent();
                    intent.setAction("mainFragmentA");
                    sendBroadcast(intent);
    
                    //发送广播
                    Intent intent = new Intent();
                    intent.setAction("mainFragmentB");
                    sendBroadcast(intent);

        接收广播:

    下面的写在需要接收广播的类中:

                    //注册广播机制
                    MyReceiver receiver = new MyReceiver();
                    //创建过滤器,并指定action,使之用于接收同action的广播
                    IntentFilter filter1 = new IntentFilter("mainFragmentA");
                    IntentFilter filter2 = new IntentFilter("mainFragmentB");
                    //注册广播接收器 
                    registerReceiver(receiver, filter1);
                    registerReceiver(receiver, filter2);

    下面是新建一个广播的类:

                    private class MyReceiver extends BroadcastReceiver {
                    private static final String action1 = "mainFragmentA";//第一个动作
                    private static final String action2 = "mainFragmentB";//第2个动作
                    @Override
                    public void onReceive(Context context, Intent intent) {
                        if (intent.getAction().equals(action1)){
                            sendHttp();//第一个动作需要处理的事情
                        }else if (intent.getAction().equals(action2)){
                            sendHttp();//第二个动作需要处理的事情
                        }
                       }
                    }

     

    更多好内容戳下面:

    https://blog.csdn.net/wuqingsen1

    展开全文
  • android 跨应用程序广播发送接受

    万次阅读 热门讨论 2016-05-18 18:09:25
    广播作为android的四大组件之一,适用的地方还是很多,多用来特定条件情况下的通知。例如,开机,闹铃,电池电量过低等等。...2、发送广播的应用程序代码 broadcastsend这个apk的代码很简单,有个按

    广播作为android的四大组件之一,适用的地方还是很多,多用来特定条件情况下的通知。例如,开机,闹铃,电池电量过低等等。但还可以自定义广播,用来两个应用程序的通知。

    曾经写的开机自启动的博客(通过接受系统广播):Android 开机自启动示例程序

    这篇博客源码下载:点击

    1、实现界面

     


    2、发送广播的应用程序代码

    broadcastsend这个apk的代码很简单,有个按钮点击触发。发送广播就行了。

    package com.example.broadcastsend;
    
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.app.Activity;
    import android.content.Intent;
    
    public class MainActivity extends Activity {
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				//发送广播
    			    String broadcastIntent = "com.customs.broadcast";//自己自定义
    			    Intent intent = new Intent(broadcastIntent);
    			    MainActivity.this.sendBroadcast(intent);
    			}
    		});
    	}
    }
    
    这个发送的程序当中,在AndroidManifest.xml里面不用添加什么。


    3、接受广播的应用程序代码

    broadcastreceiver这个apk里面的代码,肯定要重写广播接受的类,就是继承BroadcastReceiver,重写onReceive这个方法就行了。

    package com.example.broadcastreceiver;
    
    import android.app.AlertDialog;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.DialogInterface.OnClickListener;
    import android.content.Intent;
    import android.view.WindowManager;
    public class CustomBroadReceiver extends BroadcastReceiver{
    	private static final String ACTION = "com.customs.broadcast";
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		//广播接受
            if (intent.getAction().equals(ACTION)){
            	AlertDialog.Builder builder = new AlertDialog.Builder(context);
        		builder.setTitle("提示")
        		.setMessage("收到BroadcastSend应用程序的广播")
        		.setPositiveButton("确定", new OnClickListener() {
    				@Override
    				public void onClick(DialogInterface dialog, int which) {
    					
    				}
    			})
    			.setNegativeButton("取消", new OnClickListener() {
    				
    				@Override
    				public void onClick(DialogInterface dialog, int which) {
    					
    				}
    			});
        		AlertDialog dialog = (AlertDialog) builder.create();
        		dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        		dialog.show();
          }
    	}
    
    }
    

    然后在AndroidManifest.xml里面添加注册

             <!-- 广播接收 -->
           <receiver android:name="com.example.broadcastreceiver.CustomBroadReceiver">
               <intent-filter>
                    <action android:name="com.customs.broadcast" />
               </intent-filter>
           </receiver> 

    到这里基本就结束了,是不是很简单。跨应用程序的广播接受。

    4、注意事项

    有没有注意到,我在广播接受里面,写了一个弹出对话框。这个有点特殊,一般是弹不出来对话框。是通过hander传递到具体界面显示的或者其它消息通知。

    但我这里可以实现直接弹出对话框提示。因为我添加了两样东西。

    a、对话框设置

    dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
    b、AndroidManifest.xml里面添加权限

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>


    其它代码就不贴了,也没什么代码,广播其实很简单,灵活好用。。。

    曾经写的开机自启动的博客(通过接受系统广播):Android 开机自启动示例程序

    这篇博客源码下载:点击



    展开全文
  • 首先我们先静态注册一个广播接收器: 右击包名,在打开的快捷菜单中选择New–Other–...exported表示是否接收本程序以外的广播 接着就会得到一个类并继承BroadcastReceiver类,代码如下: public class MyRecei...

    首先我们先静态注册一个广播接收器:
    右击包名,在打开的快捷菜单中选择New–Other–Broadcast Receiver
    然后输入名字,我这里输入的是MyReceiver,并勾选enable和exported
    enable表示是否启用
    exported表示是否接收本程序以外的广播

    接着就会得到一个类并继承BroadcastReceiver类,代码如下:

    public class MyReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
               Toast.makeText(context, "接收自定义广播成功", Toast.LENGTH_SHORT).show();
        }
    }
    

    因为Android的四大组件都会在AndroidManifest.xml中注册
    所以在AndroidManifest.xml中也会有如下代码:

    <receiver
                android:name=".MyReceiver"
                android:enabled="true"
                android:exported="true">
                <intent-filter>
                    <action android:name="com.my.broadcast"/>
                </intent-filter>
            </receiver>
    

    因为之前的快捷操作,AndroidStudio自动在AndroidManifest.xml中注册好了,就像你新建一个Activity一样。

    此处的intent-filter标签的作用是过滤广播,也就是指定你创建的这个广播接收器接收的广播,你指定他接收什么广播,就要在这个标签中添加对应的action。

    可以看到,我此处指定他接收一条名为com.my.broadcast的广播,这是我自定义的广播,也就是说,这个广播接收器目前只能接收到com.my.broadcast的广播,以上广播接收器的静态注册就完成了。

    现在我们在MainActivity中发送一条为com.my.broadcast的广播
    代码如下:

    public class MainActivity extends AppCompatActivity {
        private Button btn_send;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            btn_send = findViewById(R.id.main_btn_send);
    
            btn_send.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 调用构造方法为Intent设置了Action
                    Intent intent = new Intent("com.my.broadcast");
                    //发送广播
                    sendBroadcast(intent);
                }
            });
    
        }
    }
    

    此处我在MainActivity的布局中就写了一个Button,并为这个Button设置监听事件,点击这个Button就发送一条为com.my.broadcast的广播,此时已经注册好的广播接收器,收到了这条广播后,就会执行它的onReceive()方法,我这里就弹一个Toast,所以你会看到一个Toast的提示。

    证明广播的跨应用性
    打开另外一个新的项目
    静态注册一个广播接收器,并在onReceive()方法中弹一个Toast
    设置action为com.my.broadcast
    运行程序,点击按钮发送广播,此时你会发现弹出两个Toast
    这就证明了本程序的广播也可以被别的程序接收到

    展开全文
  • Socket广播包经常被用于局域网内的两台设备之间互相发现和消息传递,在Android应用开发过程中,也经常会遇到这样的需求,例如:两台Android设备之间、Android...首先给一段Android发送广播包的示例代码:Datagram...
    Socket广播包经常被用于局域网内的两台设备之间互相发现和消息传递,在Android应用开发过程中,也经常会遇到这样的需求,例如:两台Android设备之间、Android与手环等智能硬件之间、Android与Windows电脑之间等等。

    本文主要介绍在Android中使用Socket开发广播包程序时需要注意的编程事项,以及解决方法。

    首先给出一段Android发送广播包的示例代码:

    DatagramSocket socket = new DatagramSocket(8000);
    socket.setBroadcast(true);
    InetAddress addr = InetAddress.getByName("255.255.255.255");
    byte[] buffer = "Hello World".getBytes();
    DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
    packet.setAddress(addr);
    packet.setPort(8086);
    socket.send(packet);

    下面分析其中需要注意的地方:

    1. 不要在主线程中发送广播包

    当然,这个做Android开发的人应该都知道,不能在UI线程中执行任何网络访问相关的操作,由于广播包的发送也属于网络操作,因此必须放到单独的线程中执行。

    2. 广播地址不建议使用“255.255.255.255”

    上述代码中,广播包的目标地址设置为了“255.255.255.255”,其实,这并不是一种推荐的做法。

    “255.255.255.255” 是一种受限的广播地址,常用于在计算机不知道自己IP地址的时候发送,比如设备启动时向DHCP服务器索要地址等等,一般情况下,路由器不会转发目标为受限广播地址的广播包。

    而且,有些路由器/Wi-Fi热点不支持该广播地址(例如:用Android手机做Wi-Fi热点的时候),因此在程序中会出现“ENETUNREACH (Network is unreachable)”的异常,因此,为了保证程序成功发送广播包,建议使用直接广播地址,例如:当前IP地址是 192.168.1.100,子网掩码是 255.255.255.0 的情况下,广播地址为:192.168.1.255,(具体的推算方法这里就不展开了,可以参考计算机网络相关书籍)。

    那么,如何得到本网段的直接广播地址呢,下面是stackoverflow上面有位大牛分享的代码:

    public static InetAddress getBroadcastAddress(Context context) throws UnknownHostException {
        WifiManager wifi = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
        DhcpInfo dhcp = wifi.getDhcpInfo();
        if(dhcp==null) {
            return InetAddress.getByName("255.255.255.255");
        }
        int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
        byte[] quads = new byte[4];
        for (int k = 0; k < 4; k++)
            quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
        return InetAddress.getByAddress(quads);
    }

    直接使用该函数即可得到正确的“广播地址”,通过setAddress函数设置到DatagramPacket对象中即可。

    3. Android设置为Wi-Fi热点时的广播地址

    这是个比较大的坑,当Android设备被设置为Wi-Fi热点的时候,上面的函数得到的地址是"0.0.0.0",因此,我们需要探究当Android设备被设置为Wi-Fi热点的时候,它的IP地址究竟是多少?

    有人研究了Android底层源码发现,当Android设备被设置为Wi-Fi热点的时候,其IP地址是hardcode写死在源码中的,地址是:“192.168.43.1”,对应的广播地址是:"192.168.43.255"

    为此,我们需要写个函数来判断一下当前Android手机是否处于Wi-Fi热点模式下,如果是,则应该使用上面给出的这个广播地址,这里给出代码示例:

    protected static Boolean isWifiApEnabled(Context context) {
        try {
            WifiManager manager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);  
            Method method = manager.getClass().getMethod("isWifiApEnabled");
            return (Boolean)method.invoke(manager);
        }
        catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e)  {
            e.printStackTrace();
    }
        return false;
    }

    Android SDK并没有开放判断是否处于热点模式的API,因此,我们需要通过反射的方式来得到,另外,注意添加权限: 
    展开全文
  • Android 两种注册、发送广播的区别

    千次阅读 2018-05-23 14:56:23
    关键字:注册广播 ...BroadcastReceiver广播接收者用于接收系统或其他程序(包括自己程序)发送广播。一.注册广播在android中,我们如果想接收到广播信息,必须自定义我们的广播接收者。要一个类来继承Broad...
  • Android--socket 发送广播的那些坑

    千次阅读 2016-10-11 14:37:52
    Socket广播包经常被用于局域网内的两台设备之间互相发现和消息传递,在Android应用开发过程中,也经常会遇到这样的需求,例如:两台Android设备之间、Android与手环等智能硬件...首先给一段Android发送广播包的示例代
  • 《第一行代码 Android》5.3.2发送有序广播遇到的问题 ...3.书上意思是直接运行,然后在模拟器里跳到主界面,再调出BroadcastTest这个app,点击按钮,发送广播后,由于两个app都有监听器所以会分别弹两次提示...
  • Android广播发送接收机制

    千次阅读 2018-05-29 10:52:18
    1 广播类型 从广播的注册方式来分,分为以下2种:静态注册:通过&lt;receiver&gt;&... 上面静态广播和动态广播比较明显的3个区别:(1)静态广播在进程没有运行的时候,也可以收到,这时...
  • UDP广播包的发送问题

    千次阅读 2017-11-07 15:28:14
    嵌入式设备发送广播包就是一个可行的方案。 UDP广播包,打包buf中信息为设备的信息。然后通过UDP广播到网络中。 话不多说,直接给广播包的源代码 {CSDN:CODE:2601417} 进行arm-linux-gcc交叉编译后,放进开发板...
  • 应用进程处理广播 scheduleRegisterReceiver处理非串行化动态广播 ... 上面讲到调用deliverToRegisteredReceiverLocked方法时,会调用performReceiveLocked方法,我们再看一下该方法 void performReceiveLocked
  • 豆瓣客户端(三)发送图文广播

    千次阅读 2013-10-02 18:24:56
    在不使用第三方类库的情况下,使用豆瓣的广播接口发送图文广播,包括POST文字内容,图片数据等。
  • 分类: Android 2011-09-05 01:01 ... 前面我们分析了Android应用程序注册广播接收器的过程,这个过程只完成了万里长征的第一步,接下来它还要等待ActivityManagerService将广播分发过来。ActivityManage
  • [Android]Ams 广播发送原理(三)

    千次阅读 2017-08-04 17:51:13
    broadcastIntentLocked Ams广播
  • 背景:两个应用需要通信,和同事讨论了一下,因为功能比较简单所以打算使用广播进行通信。...举例说明,最简单的发送广播代码: Intent intent = new Intent("com.test.broadcast.receiver"); this.sendBroadcast(...
  • 没有发送出消息 -( void )onUdpSocket:( AsyncUdpSocket *)sock didNotSendDataWithTag:( long )tag dueToError:( NSError *)error{   NSLog ( @"%@" ,error);     NSLog ( @"not send" )...
  • 前面几天在逛论坛时看见有人说RTT中没有广播机制,于是心血来潮,想自己动手一个,于是有了此文.1 广播机制分析广播,这个词首先让我想到Android下的广播机制,其是基于Binder来实现的,然而RTT并不是Linux内核的东东,也...
  • 近日,接到需要用到蓝牙解锁硬件设备的新需求,开发过程中呢也遇到许多硬件的坑,开发协议文档较简单,几句话就完了,第一次搞得我自己一脸懵逼,本来一两个小时就能完并测试完成的过程用了两三天。哎!默默地回到...
  • 在Android4.4之前也就是以发送一个Action为“Intent.ACTION_MEDIA_MOUNTED”的广播通知执行扫描。如下: 但在Android4.4中,则会抛以下异常: W/ActivityManager( 498): Permission Denial: not
  • 这个问题排查了好久,代码是别人的,自己平时都是用路由传数据,一直没找到是在哪里重复触发了广播的接收方法$rootScope.$on,百度了一下发现很多人碰到这种问题,有大神给解决方法是自己一个service把广播替换...
  • · 普通广播(Normal Broadcast):用sendBroadcast()方法发送。 普通广播是完全异步的,逻辑上可以在同一时刻被所有匹配的接受者接收到,消息传递效率高,缺点是接受者不能将处理结果传递给下一个接收者,也无法...
  • mpi中的广播

    万次阅读 2013-07-15 21:20:29
    MPI可以实现一对多的集合通信,最常用的是广播:某个进程将数据广播到所有其他进程,最终的结果就是每个进程都有一份广播的数据...该函数在使用过程中非常容易出错,在此我们通过具体实例来说明其使用方法。 MPI_Bcas
  • GPRS短信发送方法

    千次阅读 2009-08-16 16:13:00
    最近做了一个GPRS模块的简单测试,其中短消息方式比较简单,同时也与其他GPRS模块通用,现在将我的调试笔记下来。短消息方式:一、与短信相关的 AT 指令 AT+CMGC Send an SMS command(发出一条短消息命令) ...
  • BroadcastReceiver是Android系统的四大组件之一,BroadcastReceiver是一个全局的...我们来一个最简单的广播接收过程先在manifest中定义一个广播接受者 android:allowBackup="true" android:icon="@drawable/ic_l
  • 广播——broadcast

    千次阅读 2016-05-27 17:52:13
    发送自定义广播 发送有序广播 发送有序广播步骤 优先级 使用本地广播 出现原因 本地广播使用 优点 广播优先级 基本原则 ordered 广播 非 ordered 广播 只能动态接受广播源码分析 目的 参考...
  • 安卓开发22:广播机制

    千次阅读 2013-07-15 10:31:39
    例如电池的事件,电池快没电的时候,会发送一个广播,如果你的应用中有接收这个广播,则就会调用广播接收的程序。 看一个图: 一些观点: 在Android 中如果要发送一个广播必须使用sendBroadCast
  • 用两种方式实现如下需求(使用动态和静态注册广播):编写一个程序,要求在activity中点击一个button,发送一个广播(该广播的intent中携带一个字符串数据),自定义一个广播接受者,接收到这个广播之后toast显示...
  • Android广播机制详解

    万次阅读 2016-06-07 23:16:13
    1 广播类型 从广播的注册方式来分,分为以下2种: (1)静态广播:通过的形式在AndroidManifest.xml中注册的广播; (2)动态广播:通过context. registerReceiver在程序中显示注册的广播; 上面静态广播和动态广播...
  • android 通过广播唤醒被杀死的app

    千次阅读 2017-11-07 08:23:25
    exported默认为true表示这个广播可以接收来自其他app发送的广播,只要条件满足,exported设置成false表示只能是这个app内发送的广播才能接收,即使是receiver的进程和发送广播的进程不是同一个,但是只要

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,776
精华内容 33,110
关键字:

写出发送广播的方法