首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

androi之Service+Broadcast+Timer+ui【经过绑定服务、自定义回调接口判断网络连接】

2013-10-27 
androi之Service+Broadcast+Timer+ui【通过绑定服务、自定义回调接口判断网络连接】最近项目要定时从服务器获

androi之Service+Broadcast+Timer+ui【通过绑定服务、自定义回调接口判断网络连接】

      最近项目要定时从服务器获取某些信息,通过研究来总结一下下【我以定时判断网络状态为例来阐述】

     原理:

    我们定义一个Service,在该Service中设置一个定时器Timer,通过TimerTask的策略来检查当前应用的网络连接状态,关键是在该Service需要自定义一个回调接口用于向我们的Activity来回调发送网络状态,然后通过Bind来绑定当前的Service,在绑定成功之后得到回调信息

  代码:

Service类

  

package com.example.androidtimerdemo;import java.util.Timer;import java.util.TimerTask;import com.example.androidtimerdemo.MybindService.MyBind;import com.example.androidtimerdemo.NetService.GetConnectState;import com.example.androidtimerdemo.NetService.NetBind;import android.os.Bundle;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener{TextView textView;TextView textView2;Button button1, button2;Activity activity;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate( savedInstanceState );setContentView( R.layout.activity_main );activity = this;initView();}private void initView(){textView = (TextView) findViewById( R.id.textView1 );textView2 = (TextView) findViewById( R.id.textView2 );button1 = (Button) findViewById( R.id.button1 );button2 = (Button) findViewById( R.id.button2 );button1.setOnClickListener( this );button2.setOnClickListener( this );}boolean is;@Overridepublic void onClick(View v){switch (v.getId()){case R.id.button1:// 绑定服务Log.i( "tag", "click**" + Thread.currentThread().getId() );Intent intent = new Intent( activity, NetService.class );boolean isTrue = bindService( intent, conn, Context.BIND_AUTO_CREATE );is = isTrue;break;case R.id.button2:unBind();default:break;}}private void unBind(){if (conn != null){unbindService( conn );}}private boolean conncetState = true;private ServiceConnection conn = new ServiceConnection(){@Overridepublic void onServiceDisconnected(ComponentName name){// TODO Auto-generated method stub}@Overridepublic void onServiceConnected(ComponentName name, IBinder service){NetBind bind = (NetBind) service;NetService netService = bind.getNetService();            //此处回调netService.setOnGetConnectState( new GetConnectState(){@Overridepublic void GetState(boolean isConnected){// TODO Auto-generated method stubif (conncetState != isConnected){conncetState = isConnected;}Message msg = handler.obtainMessage();if (conncetState){msg.what = 1;}else{msg.what = 2;}handler.sendMessage( msg );}} );}};Handler handler = new Handler(){public void handleMessage(Message msg){switch (msg.what){case 1:Toast.makeText( activity, "connect", 2000 ).show();break;case 2:Toast.makeText( activity, "not", 2000 ).show();default:break;}};};}

PS:记得加网络权限哦



热点排行