在Receiver或Server中修改主Activity对应布局中的控件

来源:互联网 发布:医疗行业数据分析 编辑:程序博客网 时间:2024/06/11 02:40

今天在开发一个新应用的时候遇到一个问题:

    app与服务器的每一步交流都要记录下来并进行展示:
   


抓狂



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
原创粉丝点击