android广播传递
❶ android 怎样将message对象通过广播传输
线程中:
Message msg = Message.obtain();
msg.obj = result1; //从这里把你想传递的数据放进去就行了
handler.sendMessage(msg);
线程外:
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String getResult1=(String)msg.obj;
}
};
❷ 简述在android中如何发送广播消息
1.发送广播
Intent intent = new Intent(BroadcastAction);
Bundle bundle = new Bundle();
bundle.putString("***", SUCCESS);
bundle.putString("FullPathName", mFullPathName);
intent.putExtras(bundle);
sendBroadcast(intent);
2.在Activity中创建一个内部类MyBroadcastReceiver扩展BroadcastReceiver,并在其中实现onReceive方法。
3.在Activity中声明一个MyBroadcastReceiver类型的成员变量,并注册:
private MyBroadcastReceiver myBroadcastReceiver;
...
myBroadcastReceiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(BroadcastAction);
registerReceiver(receiver, filter);
4.使用完后要记得释放
unregisterReceiver(receiver);
注:1和2中的 BroadcastAction要是同一个Action
❸ 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-Android广播怎么传递数据给Activity
一种是像楼主所说的,在Activity里注册一个BroadcastReceiver,Service完成某个任务就可以发一个广播,接收器收到广播后通知activity做相应的操作。 另一种是,使用bindService来关联Service和Application,应用.apk里的所有组件一般情况都运行在同一个进程中,所以不需要用到IPC,bindService成功后,Service的Client可以得到Service返回的一个iBinder引用,具体的参见Service的文档及onBind的例子,这样Service的引用就可以通过返回的iBinder对象得到,如 public class LocalService extends Service { // This is the object that receives interactions from clients. See // RemoteService for a more complete example. private final IBinder mBinder = new LocalBinder(); public class LocalBinder extends Binder { LocalService getService() { return LocalService.this; } } @Override public IBinder onBind(Intent intent) { return mBinder; } } 之后Client通过这个iBinder对象得到Service对象引用之后,可以直接和Service通讯,比如读取Service中的值或是调用Service的方法。
❺ 注册广播有几种方式,这些方式有何优缺点请谈谈Android引入广播机制的用意。
android中,不同进程之间传递信息要用到广播,可以有两种方式来实现。
第一种方式:在Manifest.xml中注册广播,是一种比较推荐的方法,因为它不需要手动注销广播(如果广播未注销,程序退出时可能会出错)。
具体实现在Manifest的application中添加:上面两个android:name分别是广播名和广播的动作(这里的动作是表示系统启动完成),如果要自己发送一个广播,在代码中为:
Intent i = new Intent(“android.intent.action.BOOT_COMPLETED”);
sendBroadcast(i);
这样,广播就发出去了,然后是接收。
接收可以新建一个类,继承至BroadcastReceiver,也可以建一个BroadcastReceiver的实例,然后得写onReceive方法,实现如下:
protected BroadcastReceiver mEvtReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(“android.intent.action.BOOT_COMPLETED”)) {
//Do something
}
}
};
第二种方式,直接在代码中实现,但需要手动注册注销,实现如下:
IntentFilter filter = new IntentFilter();
filter.addAction(“android.intent.action.BOOT_COMPLETED”);
registerReceiver(mEvtReceiver, filter); //这时注册了一个recevier ,名为mEvtReceiver,然后同样用上面的方法以重写onReceiver,
最后在程序的onDestroy中要注销广播,实现如下:
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mPlayerEvtReceiver);
}
❻ android 广播传值
intent.putExtras(intent); 这条语句不是很矛盾吗? 去掉这条语句就可以了
startService(intent);这个时候已经把intent传递给service了
你看一下service里的onStart 方法,不是传递了一个intent吗
请采纳哈.
❼ android 怎么发送系统广播
分为4步:
首先要声明广播
其次要注册广播,有两种方式:xml注册和代码注册
发送广播
收听开机广播
268101305698999
❽ Android开发中怎么把广播中处理后的信息传递给Activity
1.发送广播
Intent intent = new Intent(BroadcastAction);
Bundle bundle = new Bundle();
bundle.putString("***", SUCCESS);
bundle.putString("FullPathName", mFullPathName);
intent.putExtras(bundle);
sendBroadcast(intent);
2.在Activity中创建一个内部类MyBroadcastReceiver扩展BroadcastReceiver,并在其中实现onReceive方法。
3.在Activity中声明一个MyBroadcastReceiver类型的成员变量,并注册:
private MyBroadcastReceiver myBroadcastReceiver;
...
myBroadcastReceiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(BroadcastAction);
registerReceiver(receiver, filter);
4.使用完后要记得释放
unregisterReceiver(receiver);
注:1和2中的 BroadcastAction要是同一个Action
❾ android中广播可以实现进程间通信吗
只有你允许客户端从不同的应用程序为了进程间的通信而去访问你的service,以及想在你的service处理多线程,下面为大家详细介绍下
Android Service是分为两种:
本地服务(Local Service): 同一个apk内被调用
远程服务(Remote Service):被另一个apk调用
远程服务需要借助AIDL来完成。
AIDL 是什么
AIDL (Android Interface Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数。
AIDL IPC机制是面向接口的,像COM或Corba一样,但是更加轻量级。它是使用代理类在客户端和实现端传递数据。
AIDL 的作用
由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象。在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界。
通过代码来实现这个数据传输过程是冗长乏味的,Android提供了AIDL工具来处理这项工作。
选择AIDL的使用场合
官方文档特别提醒我们何时使用AIDL是必要的:只有你允许客户端从不同的应用程序为了进程间的通信而去访问你的service,以及想在你的service处理多线程。
如果不需要进行不同应用程序间的并发通信(IPC),you should create your interface by implementing a Binder;或者你想进行IPC,但不需要处理多线程的,则implement your interface using a Messenger。无论如何,在使用AIDL前,必须要理解如何绑定service——bindService。
❿ Android启动广播时怎样往广播中传递参数
我们在android中使用广播来让其他监听广播的地方能够对相应的事情做处理,但有的时候我们仍然需要传递一些其他的附带值,而这个时候是可以直接用播放广播的intent来传递的。
例:
Intent intent = new Intent();
intent.putExtra("msgPersons", msgPersons);
intent.setAction(Constant.hasMsgUpdatedAction);
intent.putExtra("userId", userId);
intent.putExtra("msgCount", messages.size());
sendBroadcast(intent);
监听广播的代码:
if (type.equals(Constant.hasMsgUpdatedAction)) {
if (obj instanceof Intent) {
Intent intent = (Intent) obj;
String msgPersons = intent.getStringExtra("msgPersons");
.......
}
}
这里的obj实际上是广播监听函数public void onReceive(String type, Object obj)中的第二个参数。当时看到这个函数的时候,一直不明白第二个参数的作用,后来才发现,原来还可以通过它来得到intent。