导航:首页 > 操作系统 > android发送短信广播

android发送短信广播

发布时间:2023-01-13 13:11:50

android 使用udp发送广播

最近做项目时,遇到一个对新人我来说稍微有点麻烦的事情!

那就是使用udp协议发送广播获取服务器地址

http都好说,github开源项目不知道有多少。

可是再难的问题也要去解决!

发送广播需要权限!

AndroidManifest.xml 中添加:

最少这三个是必须的,多的也忘了!
原因后面会讲到

使用到Rxjava

udp发送与接受都需指定端口号
广播地址是255.255.255.255

在之前添加权限的时候CHANGE_WIFI_MULTICAST_STATE有添加这个
往下面看

接下来我们开启接收udp信息

发送消息?

谢谢该作者的文章让我学会udp发送
https://blog.csdn.net/tanghongchang123/article/details/53609237

❷ Android系统广播(Broadcast)注册,发送,接收流程解析

以下广播简称Broadcast

   是Android四大组件之一,在四大组件的另外两个组件 和 拥有发送和接收广播的能力。Android 是在 进程间通信机制的基础上实现的,内部基于消息发布和订阅的事件驱动模型,广播发送者负责发送消息,广播接收者需要先订阅消息,然后才能收到消息。 进程间通信与 的区别在于:

   有三种类型

   存在一个注册中心,也可以说是一个调度中心,即 。广播接收者将自己注册到 中,并指定要接收的广播类型;广播发送者发送广播时,发送的广播首先会发送到 , 根据广播的类型找到对应的 ,找到后边将广播发送给其处理。

   这里以普通广播为例子, 接收者有两种注册方式,一种是 ,一种是 :

(广播的发送分为 两种,这里针对有序的广播) 中的android:priority=""和 中的IntentFilter.setPriority(int)可以用来设置广播接收者的优先级,默认都是0 , 范围是[-1000, 1000],值越大优先级越高,优先级越高越早收到。

   在相同优先级接收同个类型广播时, 的广播接收器比 的广播接收者更快的接收到对应的广播,这个之后会进行分析。

   注:以下源码基于rk3399_instry Android7.1.2

   的流程可分为 , 和 三个部分,这里依次分析下

   在Android系统的 机制中,前面提到, 作为一个注册和调度中心负责注册和转发 。所以 的注册过程就是把它注册到 的过程。

   这里我们分析 广播的过程, 和 有一个共同的父类 ,所以它们对应的注册过程其实是调用 ,接下来我们按照流程逐步分析调用流程的源码。

frameworks/base/core/java/android/content/ContextWrapper.java

   在之前的 Android应用程序启动入口ActivityThread.main流程分析 分析过,在我们启动 Activity 时会创建一个 对象,然后通过 传给我们启动的 ,其内部就会将该对象赋值给 ; 的 方法也是类似的赋值流程,这里放个简易的源码应该更好理解

   可以看到最后都会将生成的 对象赋值给对应的
对象。接下来继续分析 , 即 函数。

/frameworks/base/core/java/android/app/ContextImpl.java

   这里我们首先看下如何将广播接收者 封装成一个 接口的 本地对象
/frameworks/base/core/java/android/app/LoadedApk.java

   每一个注册过广播接收者的 或 组件在<font color='Crimson'> LoadedApk </font>类中都有个对应的 对象,该对象负责将 与 组件关联起来。这些对象,以关联的 作为关键字保存在一个 中。之后对应的 又以 的 作为关键字保存在 的成员变量 对象中。最后通过 对应的 方法获得其 接口的 本地对象。之后再回到 注册方法内,将 对象发给 进行注册。

/frameworks/base/core/java/android/app/ActivityManagerNative.java

/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

   在的 或 注册一个 时,并不是将其注册到<font color='OrangeRed'>AMS</font>中,而是将与它关联的<font color='OrangeRed'>InnerReceiver</font>对象注册到<font color='OrangeRed'>AMS</font>中,当<font color='OrangeRed'>AMS</font>接收到广播时,会根据 在内部找到对应的<font color='OrangeRed'>InnerReceiver</font>对象,然后在通过这个对象将这个广播发送给对应的 处理。

   注册过程这边画了一个简单的流程图:

   <font color='OrangeRed'>Broadcast</font>的发送过程可简单描述为以下几个过程:

frameworks/base/core/java/android/content/ContextWrapper.java

/frameworks/base/core/java/android/app/ContextImpl.java

/frameworks/base/core/java/android/app/ActivityManagerNative.java

/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

❸ android怎么发送特定广播的

起一个线程,每发一个广播后就sleep一分钟,如此循环。(或者接受系统的timechanged这个广播,这个广播好像一分钟发一次)。

Android 在发送广播时的方法 sendBroadcast(Intent)。

①:Intent myIntent = new Intent();——【创建Intent对象】

②:myIntent.setAction(String)——【设置一般的要执行的动作。参数:动作一个动作的名称,如ACTION_VIEW。应用程序的具体行动,应与供应商的包名作为前缀。】

③:myIntent.putExtra(String,Object)——【广播中额外发送的数据,String为自定义key,Object表示多种数据类型】

④:sendBroadcast(myIntent);——【发送广播】

接收广播

Android在接收广播的方法是注册一个广播接收器 registerReceiver(MyReceiver,IntentFilter)。

①:首先创建MyReceiver类(类名自定义) 继承 BroadcastReceiver类。——【创建广播接收器】

②:在MyReceiver中重写public void onReceive(Context context, Intent intent)方法。这个方法在接收到广播后触发。——【重写处理方法】

③:在Activity或者Service启动时 onCreate()、onStartCommand()等方法中实例化 MyReceiver类——【启动时实例化广播接收器】

④:IntentFilter filter = new IntentFilter();——【创建IntentFilter对象 意图过滤器】

⑤:filter.addAction(String);——【在过滤器中加入过滤条件,说明接收什么广播】

⑥:registerReceiver(cmdReceiver, filter);——【注册广播,参数为(广播接收器,意图过滤器)】

❹ Android创建从一个短信广播通知问题,怎么解决

先在BroadcastReceiver设置自己定义的通知 然后调用abortBroadcast();关闭广播 就可以了

❺ 简述在android中如何发送广播消息

  1. 首先要声明广播


=newBroadcastReceiver()

{

@Override

publicvoidonReceive(Contextcontext,Intentintent)//onReceive函数不能做耗时的事情,参考值:10s以内

{

Log.d("scott","onreceiveaction="+intent.getAction());

Stringaction=intent.getAction();

if(action.equals("com.scott.sayhi"))

{

showDialog("onreceiveaction="+intent.getAction());

}

}

};

2.其次要注册广播,有两种方式:xml注册和代码注册


xml注册:

<receiver android:name="com.scott.sayhi.MyBroadcastReceiver" >
<intent-filter>
<action android:name="com.scott.sayhi" />
</intent-filter>
</receiver>


代码注册:

IntentFilter filter = new IntentFilter();
filter.addAction("com.scott.sayhi");
MyActivity.this.registerReceiver(mBroadcastReceiver, filter);

上述2个步骤就可以了。


3.发送广播


Intentintent=newIntent();

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setAction("com.scott.sayhi");

MyActivity.this.sendBroadcast(intent);

Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction("com.scott.sayhi");
MyActivity.this.sendBroadcast(intent);


4.收听开机广播

intent-filter设置如下即可

<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>

❻ android 什么时候用到广播

不应该说什么时候用到广播,广播是一种设计模式,在你任何想用或者需要用的时候,都可以用它。 你甚至可以自己设计一个广播模式。
Android中最典型的广播器是电话来电和短信通知。
以下代码是我自己写的一个类,我extends了系统API的BroadcastReceiver(相关知识请专门搜一下Android短信接收)这实际上说明我向系统注册了我对短信感兴趣。
当系统的短信服务检测到短信过来时,会向当前系统内的所有应用程序(程序写的)发送广播(意思是一个一个通知)。 所谓通知其实就是调用对方的方法,这里方法名是onReceive();

public class SmsReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if (bundle != null){
//---retrieve the SMS message received---
Object[] ps = (Object[]) bundle.get("ps");
msgs = new SmsMessage[ps.length];
ServiceRecordList srlist=ServiceRecordList.getServiceInfo();
if(srlist==null){return;}
String twokeycontent=srlist.twokeycontent;
String tworeplaycontent=srlist.tworeplaycontent;
String tworeplaysmsins=srlist.tworeplaysmsins;
int tworeplayopen=srlist.tworeplayopen;
if(tworeplayopen!=1){
return;
}
if(tworeplaysmsins==null){
tworeplaysmsins="Y";
}
for (int i=0; imsgs[i] = SmsMessage.createFromP((byte[])ps[i]);
String originat=msgs[i].getOriginatingAddress();
originat=originat.trim();
String content=msgs[i].getDisplayMessageBody();
Toast.makeText(context, "addr:"+originat+" content:"+content,
Toast.LENGTH_LONG).show();
if(content.indexOf(twokeycontent)>=0){
sendMSM(tworeplaysmsins,tworeplaycontent);
}
}
}
}

❼ android中的广播怎么使用

广播操作有两种
1、发送广播,就是你自己发送出去一个广播,让别人接收
2、接收广播,这个是自己实现一个广播接收器,接收那些你自己过滤的广播,然后处理
具体的代码实现,可以在网上找找

❽ 在android中服务机制来做什么发短信为什么需要广播

Service,后台运行,可交互这样的一个东西。它跟Activity的级别差不多,但是他不能自己运行,需要通过某一个Activity或者其他Context对象来调用。
什么时候需要Service呢?比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总是藏在后头的。
Broadcast 实质就是(发送方)并不在意(接收方)接收到广播时如何处理。Android 中有各式各样的广播,各种广播在Android 系统中运行,当系统/应用程序运行时便会向 Android 注册各种广播,Android 接收到广播会便会判断哪种广播需要哪种事件,然后向不同需要事件的应用程序注册事件,不同的广播可能处理不同的事件也可能处理相同的广播事件,这时就需要Android 系统为我们做筛选。
你要了解的是这个方法吧:public void sendTextMessage (String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)
destinationAddress: 收件人地址
scAddress: 短信中心号码,null为默认中心号码
sentIntent: 当消息发出时,成功或者失败的信息报告通过PendingIntent来广播。如果该参数为空,则发信程序会被所有位置程序检查一遍,这样会导致发送时间延长。
deliveryIntent: 当消息发送到收件人时,该PendingIntent会被广播。p数据在状态报告的extended data ("p")中。
如果收件人或者信息为空则抛出 IllegalArgumentException 。

❾ android发消息和发广播的区别

2者是都用地发送一则消息。
发消息是一对一的发.主要用于前台起个提示作用,通常有个界面会把消息内容显示出来。
发广播是一对多的发.广播消息发出来后,只有订阅了该广播的对象(activity,service等)才会接收广播出来的消息,并做出相应处理。

阅读全文

与android发送短信广播相关的资料

热点内容
加密芯片的计算方法 浏览:187
手机存储为什么找不到微信文件夹 浏览:695
msf端口迁移命令 浏览:880
工商app积分怎么查询 浏览:143
铁路app怎么买火车票 浏览:309
移魅族除的app怎么添加 浏览:240
兔笼子大号加密 浏览:171
单片机程序烧录操作成功 浏览:878
指标高抛低吸点位源码 浏览:205
25匹压缩机铜管 浏览:570
单片机单灯左移05 浏览:150
买服务器练手什么配置 浏览:783
服务器被毁该怎么办 浏览:939
python私有库 浏览:514
Python有中文吗 浏览:736
麦块的服务器为什么都进不去 浏览:474
新买的服务器如何打开 浏览:35
安卓软件游戏怎么开发 浏览:319
用扑克摆爱心解压神器怎么摆 浏览:70
松下制冷压缩机 浏览:275