package com.webabcd.service; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; /* * startService() 和 bindService() 的区别 * startService() - 正常理解就好 * bindService() - 使当前上下文对象(本例中就是 Activity)通过一个 ServiceConnection 对象邦定到指定的 Service 。这样,如果上下文对象销毁了的话,那么其对应的 Service 也会被销毁 */ public class Main extends Activity implements OnClickListener { private TextView txtMsg; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setTitle("android 之 service"); this.findViewById(R.id.btnStart).setOnClickListener(this); this.findViewById(R.id.btnStop).setOnClickListener(this); this.findViewById(R.id.btnBind).setOnClickListener(this); this.findViewById(R.id.btnUnbind).setOnClickListener(this); txtMsg = (TextView)this.findViewById(R.id.txtMsg); // 实例化自定义的 BroadcastReceiver receiver = new UpdateReceiver(); IntentFilter filter = new IntentFilter(); // 为 BroadcastReceiver 指定 action ,使之用于接收同 action 的广播 filter.addAction("com.webabcd.service.msg"); // 以编程方式注册 BroadcastReceiver 。就是在代码中注册 //配置方式注册 BroadcastReceiver 的例子见 AndroidManifest.xml 文件 // 一般在 OnStart 时注册,在 OnStop 时取消注册 this.registerReceiver(receiver, filter); // this.unregisterReceiver(receiver); } @Override public void onClick(View v) { Intent intent = new Intent(Main.this, MyService.class); switch (v.getId()) { case R.id.btnStart: this.startService(intent); break; case R.id.btnStop: this.stopService(intent); break; case R.id.btnBind: this.bindService(intent, conn, Context.BIND_AUTO_CREATE); break; case R.id.btnUnbind: this.unbindService(conn); break; } } // bindService() 所需的 ServiceConnection 对象 private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName className, IBinder service) { } @Override public void onServiceDisconnected(ComponentName className) { } }; private String msg=""; private UpdateReceiver receiver; // 实现一个 BroadcastReceiver,用于接收指定的 Broadcast public class UpdateReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { msg = intent.getStringExtra("msg"); txtMsg.append(msg + "/n"); } } }

package com.webabcd.service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class MyBootReceiver extends BroadcastReceiver { // 用于接收满足条件的 Broadcast(相应的 Broadcast 的注册信息详见 AndroidManifest.xml ,当系统启动完毕后会调用这个广播接收器) //当开机的时候就会启动这个Service @Override public void onReceive(Context arg0, Intent arg1) { Log.d("MyDebug", "onReceive"); // 启动服务 Intent service = new Intent(arg0, MyService.class); arg0.startService(service); } } package com.webabcd.service; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.util.Log; // 演示 Service 的生命周期。具体信息运行程序后在 LogCat 中查看 public class MyService extends Service { @Override public IBinder onBind(Intent intent) { Log.d("MyDebug", "onBind"); sendMsg("onBind"); // TODO Auto-generated method stub return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); Log.d("MyDebug", "onCreate"); sendMsg("onCreate"); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.d("MyDebug", "onDestroy"); sendMsg("onDestroy"); } @Override public void onRebind(Intent intent) { // TODO Auto-generated method stub super.onRebind(intent); Log.d("MyDebug", "onRebind"); sendMsg("onRebind"); } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); Log.d("MyDebug", "onStart"); sendMsg("onStart"); } @Override public boolean onUnbind(Intent intent) { Log.d("MyDebug", "onUnbind"); sendMsg("onUnbind"); // TODO Auto-generated method stub return super.onUnbind(intent); } // 发送广播信息 private void sendMsg(String msg){ // 指定广播目标的 action (注:指定了此 action 的 receiver 会接收此广播) Intent intent = new Intent("com.webabcd.service.msg"); // 需要传递的参数 intent.putExtra("msg", msg); // 发送广播 this.sendBroadcast(intent); } }

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.webabcd.service" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Main" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 如果有需要用到的 service ,则都要在这里做相应的配置 --> <service android:name=".MyService"></service> <!-- 注册一个 BroadcastReceiver 其 intent-filter 为 android.intent.action.BOOT_COMPLETED(用于接收系统启动完毕的 Broadcast) --> <receiver android:name=".MyBootReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> </application> <!-- 接受系统启动完毕的 Broadcast 的权限 --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-sdk android:minSdkVersion="3" /> </manifest>

更多相关文章

  1. Android 长按setOnItemLongClickListener 显示context Menu(上下
  2. Qt on Android:将Qt调试信息输出到logcat中
  3. Android系统信息和安全机制
  4. 获取Android设备基本信息
  5. Android 获取imei号码,获取手机型号和系统版本号等信息
  6. android 获取手机的信息
  7. Android EditText 限制文本框输入的长度和提示信息
  8. Android中查看网卡设备信息

随机推荐

  1. 使用 IXMLHTTPRequest 简单获取网页源代
  2. 语法基础: 使用不同的数据类型标记数组
  3. 使用WCF实现SOA面向服务编程—— 架构设
  4. {$POINTERMATH ON} 方便指针操作的编译指
  5. 将字符串转换成 UTF8 编码的函数
  6. 如何用 GDI 绘制阴影文字 - 回复
  7. SOA面向服务架构——SOA的概念
  8. 几个和当前路径相关的新函数
  9. 可爱的 CreateMessageDialog
  10. 反转内存的函数