onreceive(onreceive函数)
OnReceive()怎么用,应写在那里?
首先Service、Broadcast Receiver、Content Provider都是运行在UI线程,或者说主线程中的,就是启动一个Activity时开始运行的那个进程。但是Broadcast Receiver不像Service,生命周期较短,耗时操作你不能在onReceive中执行的,比如你试试在其中启动一个对话框看看,会报错的。可能是这个原因导致你加上延迟后没有更新文字。还有,要加上执行完调用timer.cancel();结束任务。如果简单的想五秒后执行,直接用Thread,在run方法中sleep(5000);就可以了。代码如下:
new Thread(){
@Override
public void run() {
super.run();
try {
sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String text="";
ListString config = loadArray();
for(int i=0;iconfig.size();i++){
//am.killBackgroundProcesses(config.get(i));
text+=config.get(i)+"\n\r";
}
text+="off";
tv_show.setText(text);
}
}.start();
直接加到onReceive方法中就行了。
android广播接收的onReceive方法不执行,即接收不到广播的消息
最大的可能是广播没有注册
1)第一种不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。(代码里注册)
2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。(androidmanifest.xml注册)
onReceive(Context context, Intent intent)方法的两个参数是什么意思?
发送广播时:
Intent intent = new Intent(BROADCAST_COUNTER_ACTION);
intent.putExtra(COUNTER_VALUE, counter);
context.sendBroadcast(intent);
onReceive(Context context, Intent intent)的context与intent就是发送广播时的这个context和intent
为什么onReceive不会执行呢?
代码好像是没什么问题,不过可以修改一下:public class Test extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { System.out.println("Screen off..................."); } }, filter);}@Overrideprotected void onResume() { super.onResume(); System.out.println("onResume()");}@Overrideprotected void onDestroy() { super.onDestroy(); System.out.println("onDestroy()");}@Overrideprotected void onPause() { super.onPause(); System.out.println("onPause()");}
Android怎么给onReceive()函数传参数
Android怎么给onReceive()函数传参数有几种解决办法
解决方案1:
该函数是系统回调函数,不是给你调用的,你需要调用sendBroadcast(Intent o)
解决方案2:
这是个广播接收器,用来接收广播的,可以通过intent来获取广播传过来的值
解决方案3:
解决方案4:
发送广播消息是通过Context.sendBroadcast(intent)
intent中附加要传递的值
Android 怎么在onReceive方法中再发一条广播
起一个线程,每发一个广播后就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);——【注册广播,参数为(广播接收器,意图过滤器)】