Android Service、Activity、BroadcastReceiver简单使用
来源:互联网 发布:mac 硬解 h265 编辑:程序博客网 时间:2024/06/05 16:28
最近在项目要用到一个:提交->审核->审核通过流程。
对应的我就想到要使用Activity与Service通过BroadcastReceiver的简单通信,完成后简单总结一下。
实现思想:
1.简单的Activity,当点击提交按钮时,开启一个后台Service用户执行网络通信。
2.后台Service,新建一个线程,线程中用一个死循环用户访问服务器通过情况,当后台服务器通过审核,跳出循环,发送完成的广播,线程执行结束。
3.广播,当Activity接收到审核通过的广播,更新UI显示审核通过。
知识要点:
1.Android中Service的使用。
2.Android中Activity与Service的通信方式。
3.BroadcastReceiver的两种注册方式。
Android使用Service的步骤:
一、重写Service
package com.example.service;import com.example.HttpTools.WebAccessTools;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;public class HttpService extends Service { private ServiceBind myBind = new ServiceBind(); private int result=0; @Override /** *必须要重写的方法,用于和Activity通过bind通信 */ public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return myBind; } public class ServiceBind extends Binder{ public int getresult(){ return result; } } @Override public void onCreate() { // TODO Auto-generated method stub new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub HttpCheck(); }/**死循环,访问服务器,对服务器返回的数据进行判断,当判断通过的时候向Activity发送广播,跳出循环*/ private void HttpCheck() { // TODO Auto-generated method stub while(true){ String url = "http://192.168.139.1/check.php"; String res = WebAccessTools.getWebcontent(url); if(res.equals("1")){ Intent intent = new Intent(); intent.setAction("com.example.CHECKED"); sendBroadcast(intent); result = 1; break; } try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }).start(); super.onCreate(); }}
二、Activity中启动Service。
package com.example.servicedemo;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import com.example.service.HttpService;public class MainActivity extends Activity implements OnClickListener{ private Button submit; private TextView checking; private TextView checked; private BroadcastReceiver mReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initEvent(); } /* *事件处理 */ private void initEvent() { // TODO Auto-generated method stub submit.setOnClickListener(this); } /* * 初始化组件 */ private void initView() { // TODO Auto-generated method stub submit = (Button) findViewById(R.id.submit); checking = (TextView) findViewById(R.id.checking); checked = (TextView) findViewById(R.id.checked); /* *注册广播,当接收到审核通过的时候更新UI */ mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { // TODO Auto-generated method stub checking.setVisibility(View.GONE); checked.setVisibility(View.VISIBLE); } }; /* *广播接收器,动态注册广播,不需要在AndroidManifest.xml注册Receiver */ IntentFilter filter = new IntentFilter("com.example.CHECKED"); this.registerReceiver(mReceiver, filter); } @Override public void onClick(View view) { // TODO Auto-generated method stub' checking.setVisibility(View.VISIBLE); Intent bindIntent = new Intent(MainActivity.this,HttpService.class); startService(bindIntent);//开启广播 }}WebAccessTools.java
package com.example.HttpTools;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import android.content.Context;
import android.widget.Toast;
public class WebAccessTools {
/** * 当前的Context上下文对象 */ private static Context context; /** * 构造一个网站访问工具类 * @param context 记录当前Activity中的Context上下文对象 */ public WebAccessTools(Context context) { this.context = context; } /** * 根据给定的url地址访问网络,得到响应内容(这里为GET方式访问) * @param url 指定的url地址 * @return web服务器响应的内容,为<code>String</code>类型,当访问失败时,返回为null */ public static String getWebcontent(String url) { //创建一个http请求对象 HttpGet request = new HttpGet(url); //创建HttpParams以用来设置HTTP参数 HttpParams params=new BasicHttpParams(); //设置连接超时或响应超时 HttpConnectionParams.setConnectionTimeout(params,15000); HttpConnectionParams.setSoTimeout(params, 15000); //创建一个网络访问处理对象 HttpClient httpClient = new DefaultHttpClient(params); try{ //执行请求参数项 HttpResponse response = httpClient.execute(request); //判断是否请求成功 if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { //获得响应信息 String content = EntityUtils.toString(response.getEntity(), "UTF-8"); //防止乱码 return content; } else { //网连接失败,使用Toast显示提示信息 Toast.makeText(context, "网络访问失败,请检查您机器的联网设备!", Toast.LENGTH_LONG).show(); } }catch(Exception e) { e.printStackTrace(); } finally { //释放网络连接资源 httpClient.getConnectionManager().shutdown(); } return null; }
}
check.php
<?phpecho 0; //当换成echo 1;时更新UI?>
总结:这次算是简单的接触Service和BroadcastReceiver对象。
Service与Activity通信有两种方式,第一种就是这次使用的广播BroadcastReceiver,适合数据更新。第二种是试用BindService的方式开启广播,然后通过bind通信,但是只能在Activity与SerVice连接的时候进行通信,有一定局限性。
BroadcastRecevier的注册方式有两种:
一、动态注册:
//注册广播接收器(动态注册) IntentFilter filter = new IntentFilter(); filter.addAction("ABC"); this.registerReceiver(receiver, filter);
二、静态注册:
也就是在AndroidManifest.xml中注册
<receiver android:name="MyBroadcastReciever"> <intent-filter> <action android:name="ABC"></action> </intent-filter> </receiver>
- Android Service、Activity、BroadcastReceiver简单使用
- 【代码】Android -- Activity 、Service、BroadcastReceiver 综合使用
- Android~Service+BroadcastReceiver使用
- android 使用BroadcastReceiver实现开机启动Service或Activity
- 在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver
- Android中context、activity、service、broadcastReceiver的使用
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
- 浅谈android Activity,service,broadcastReceiver生命周期
- android 广播BroadcastReceiver(activity与service通信)
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
- Activity和Service通信 使用BroadcastReceiver
- Activity. Intent. Service. BroadcastReceiver的使用
- Service&BroadcastReceiver&Activity
- Activity,Service,BroadcastReceiver生命周期
- 基于Service的播放器,Activity,Service,BroadcastReceiver综合使用
- 76 Android BroadcastReceiver简单使用
- Android -- BroadCastReceiver的简单使用
- Android 颜色渲染(一) 颜色选择器 ColorPickerDialog剖析
- [从头学数学] 第139节 二次根式 小结与复习题
- Hdu 5636 Shortest Path【最短路+暴力】
- UITextView 基础篇
- 简单的dialog使用。。
- Android Service、Activity、BroadcastReceiver简单使用
- MySQL5.5从零开始学(2013-12-18 16:22:52)
- UITextField 限制用户输入小数点后位数的方法
- java布局FlowLayout
- 关于mac android studio 与svn 解除关联后 无法再次share (Subversion) 的解决办法
- “反射”的心路历程
- BOM
- java字符编码处理
- 设置图标和启动屏