在Receiver或Server中修改主Activity对应布局中的控件
来源:互联网 发布:医疗行业数据分析 编辑:程序博客网 时间:2024/06/11 02:40
今天在开发一个新应用的时候遇到一个问题:
app与服务器的每一步交流都要记录下来并进行展示:
![抓狂](http://static.blog.csdn.net/xheditor/xheditor_emot/default/crazy.gif)
Activity内部的与服务器的交流自不必说。但在后台服务中进行的呢?在广播接收器中进行的呢?
我的解决方法是在对应的Activity内部定义一个局部的广播接收器,并进行动态注册。
BroadcastReceiver textview_Receiver=new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.d("sd", "________________________________________________________"); Log.d("sd", "-!!!!!!!!!!!!!!!!!-------textview_Receiver server broadcast received ---------"); Log.d("sd", "________________________________________________________"); if (intent.getAction().equals("com.bignerdranch.android.finishtest.CONFIG_OK")){ //修改textview的内容 String configJsonObject1=intent.getStringExtra("configJsonObject"); String configresult1=intent.getStringExtra("config_result"); config_String=config_String+"<br>"+"<font color='#73D008'>" +"Post: "+ "</font>"+configJsonObject1+"</br><br>"+"<font color='#73D008'>" +"Result: "+"</font>"+configresult1+"</br>"; config_textview.setText(Html.fromHtml(config_String)); }else if (intent.getAction().equals("com.bignerdranch.android.finishtest.CONFIG_KO")){ String configJsonObject1=intent.getStringExtra("configJsonObject"); String configresult1=intent.getStringExtra("config_result"); config_String=config_String+"<br>"+"<font color='#73D008'>" +"Post: "+ "</font>"+configJsonObject1+"</br><br>"+"<font color='#73D008'>" +"Result: "+"</font>"+"<font color='#FE0404'><B>" +configresult1+"</B></font>"+"</br>"; config_textview.setText(Html.fromHtml(config_String)); } else if (intent.getAction().equals("com.bignerdranch.android.finishtest.RESULT_OK")){ String resultJsonObject1=intent.getStringExtra("resultJsonObject"); String result_result1=intent.getStringExtra("result_result"); taskresult_String=taskresult_String+"<br>"+"<font color='#73D008'>" +"Post: "+ "</font>"+resultJsonObject1+"</br><br>"+"<font color='#73D008'>" +"Result: "+"</font>"+result_result1+"</br>"; taskresult_textView.setText(Html.fromHtml(taskresult_String)); } else if (intent.getAction().equals("com.bignerdranch.android.finishtest.RESULT_KO")){ String resultJsonObject1=intent.getStringExtra("resultJsonObject"); String result_result1=intent.getStringExtra("result_result"); taskresult_String=taskresult_String+"<br>"+"<font color='#73D008'>" +"Post: "+ "</font>"+resultJsonObject1+"</br><br>"+"<font color='#73D008'>" +"Result: "+"</font>"+"<font color='#FE0404'><B>" +result_result1+"</B></font>"+"</br>"; taskresult_textView.setText(Html.fromHtml(taskresult_String)); } }};
注册:
IntentFilter filter = new IntentFilter();filter.addAction("com.bignerdranch.android.finishtest.CONFIG_OK");filter.addAction("com.bignerdranch.android.finishtest.CONFIG_KO");filter.addAction("com.bignerdranch.android.finishtest.RESULT_OK");filter.addAction("com.bignerdranch.android.finishtest.RESULT_KO");this.registerReceiver(this.textview_Receiver, filter);
注销:
this.unregisterReceiver(this.textview_Receiver);
哈哈,这样我可以在app中的任何地方对本Activity中的textview的内容进行修改啦。
比如,在服务中:
public class LongRunningService extends Service { private String TAG="lsdk"; private String config_url="http://apps.cmptech.info/smsdog/"; private String config_result; private String errormessage; private AppConfig mAppConfig; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate(){ super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { new Thread(new Runnable() { @Override public void run() { mAppConfig=new AppConfig("ASIAWEILUY","ASIAWEILUY1234", MyApplication.device_id,MyApplication.phone_number); config_result= HttpUtil.postJSONtoInternet(mAppConfig.getAppConfig(),config_url); try { if (config_result==null){//如果返回值为空 Log.d("sd","1111-----------the jsonObject is ----:"+mAppConfig.getAppConfig()); Log.d("sd","1111-----------the config is ----:"+config_result); }else { JSONObject jsonObject =new JSONObject(config_result); String state=jsonObject.optString("STS"); if (state.equals("OK")||state.equals("ok")) { Intent i=new Intent("com.bignerdranch.android.finishtest.CONFIG_OK"); i.putExtra("configJsonObject",mAppConfig.getAppConfig().toString()); i.putExtra("config_result",config_result); sendBroadcast(i); MyApplication.config=config_result; MyApplication.last_check_ok_time=System.currentTimeMillis(); }else { Intent i=new Intent("com.bignerdranch.android.finishtest.CONFIG_KO"); i.putExtra("configJsonObject",mAppConfig.getAppConfig().toString()); i.putExtra("config_result",config_result); sendBroadcast(i); errormessage=jsonObject.optString("errmsg"); //响警报 play_Warning(); Log.d("sd", "——————————————————————--warning---—————————————--config thread--———————————————:"); Log.d("sd", "——————————————————————--warning---—————————————--config thread--———————————————:"); Log.d("sd", "——————————————————————--warning---—————————————--config thread--———————————————:"); Log.d("sd", "——————————————————————--warning---—————————————--config thread--———————————————:"); //等待服务5分钟后再次启动 } } } catch (JSONException e) { e.printStackTrace(); } } }).start(); AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE); int five_minite =5 * 60 * 1000; long triggerAtTime = SystemClock.elapsedRealtime() + five_minite; Intent i = new Intent(this, AlarmReceiver.class); PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0); //这里设置的是一次性的alarm,但是每次启动服务都会重新设置一次这个alarm。 manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi); stopSelf(); return START_NOT_STICKY; } public void play_Warning(){ MediaPlayer mp = new MediaPlayer(); mp.reset(); try { mp.setDataSource(LongRunningService.this, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); mp.prepare(); } catch (IOException e) { e.printStackTrace(); } long start_time=System.currentTimeMillis(); mp.start(); Log.d("sd", "--------notification started---------"); /* new Handler().postDelayed(new Runnable() { @Override public void run() { } }, 3000);*/ } @Override public void onDestroy(){ super.onDestroy(); Log.d(TAG, "------------------服务已经停止-----------------------"); }}
对不起,还不太会使用博客中的一些编辑工具。弄的代码不是很美观。。。
0 0
- 在Receiver或Server中修改主Activity对应布局中的控件
- 在Fragment中修改Activity中的控件
- 在Activity中动态设置控件或布局的宽高适应不同分辨率
- Android 在程序中动态添加 View 布局或控件
- android中在Layout布局文件中添加控件ID,在Activity中findViewById找不到
- android中在Layout布局文件中添加控件ID,在Activity中findViewById找不到
- 在Layout布局文件中添加控件ID,在Activity中findViewById找不到
- 安卓在Activity中获取Fragment中的控件
- 在Activity中,layout布局中控件的各种实例化
- 多个Activity同用一个布局或控件
- Android中在一个Activity中修改另外一个Activity中的UI
- Android中布局或控件自定义背景
- 在其他activity中使用layout下的布局文件及控件方法
- 在Activity或fragment中响应ListView内部控件的点击事件
- 重设布局中控件或布局的宽高
- android开发之怎样在指定布局文件中动态的加入在activity中new出来的控件
- Android 在 (Activity service application receiver) 中读取<meta-data>元素的数据
- EventBus 详细使用教程[在Activity、Service、Receiver中Post]
- 主成分分析和因子分析及其在R中的…
- 最小二乘(OLS)回归法及其在R中的…
- Linux下手动配置firefox的搜索引擎
- gradle好文章
- 分类算法——决策树(1)
- 在Receiver或Server中修改主Activity对应布局中的控件
- 深入浅出SQL(1)
- 深入浅出SQL(2)——select、update…
- 深入浅出SQL(三)——表的规范化
- 欧拉路径问题 (附POJ 1041 POJ 2337)
- poj2096 Collecting Bugs
- 机器学习基础概念
- 三种方式配置Camel的ProducerTemplate
- 机器学习基本算法