说明:这个例子实现了Android中常见的许多服务,下面是实现的截图
接下来,以源代码的方式分析这个例子
1.MainActivity--主界面
这个类主要是实现用户所看到的这个Activity,其中包含了一系列的按钮,用户点击按钮执行相应的动作,所以在这个类中主要是对按钮的定义和对按钮绑定相应的监听器,下面是实现的代码:
- package lovefang.stadyService;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.Button;
- import android.view.View;
- import android.content.Intent;
- import android.util.Log;
- /**这是使用后台服务的学习例子*/
- public class MainStadyServics extends Activity {
- /**参数设置*/
- Button startServiceButton;// 启动服务按钮
- Button shutDownServiceButton;// 关闭服务按钮
- Button startBindServiceButton;// 启动绑定服务按钮
- Button sendBroadcast;// 使用广播
- Button notificationButton;// 使用通知功能
- Button alarmButton;// 使用闹钟
- Button handlerButton;// 使用handler
- Button asyncButton;// 使用异步加载
- Button phoneStateButton;// 查看手机状态
- Button callphoneButton;// 拨打电话
- Button vibratorButton;// 使用震动
- CountService countService;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Log.v("MainStadyServics", "setContentView");
- setContentView(R.layout.main);
- getWidget();
- regiestListener();
- }
- /**获得组件*/
- public void getWidget(){
- startServiceButton = (Button)findViewById(R.id.startServerButton);
- startBindServiceButton = (Button)findViewById(R.id.startBindServerButton);
- shutDownServiceButton = (Button)findViewById(R.id.sutdownServerButton);
- sendBroadcast = (Button)findViewById(R.id.sendBroadcast);
- notificationButton = (Button)findViewById(R.id.notification);
- alarmButton = (Button)findViewById(R.id.alarm);
- handlerButton = (Button)findViewById(R.id.handler);
- asyncButton = (Button)findViewById(R.id.async);
- phoneStateButton = (Button) findViewById(R.id.phonestate);
- callphoneButton = (Button) findViewById(R.id.callphone);
- vibratorButton = (Button) findViewById(R.id.vibrator);
- }
- /**为按钮添加监听*/
- public void regiestListener(){
- startServiceButton.setOnClickListener(startService);
- shutDownServiceButton.setOnClickListener(shutdownService);
- startBindServiceButton.setOnClickListener(startBinderService);
- sendBroadcast.setOnClickListener(broadcastReceiver);
- notificationButton.setOnClickListener(notification);
- alarmButton.setOnClickListener(startAlarm);
- handlerButton.setOnClickListener(handler);
- asyncButton.setOnClickListener(async);
- phoneStateButton.setOnClickListener(phonestate);
- callphoneButton.setOnClickListener(callphoneEvent);
- vibratorButton.setOnClickListener(vibrator);
- }
- /**启动服务的事件监听*/
- public Button.OnClickListener startService = new Button.OnClickListener(){
- public void onClick(View view){
- /**单击按钮时启动服务*/
- Intent intent = new Intent(MainStadyServics.this,CountService.class);
- startService(intent);
- Log.v("MainStadyServics", "start Service");
- }
- };
- /**关闭服务*/
- public Button.OnClickListener shutdownService = new Button.OnClickListener(){
- public void onClick(View view){
- /**单击按钮时启动服务*/
- Intent intent = new Intent(MainStadyServics.this,CountService.class);
- /**退出Activity是,停止服务*/
- stopService(intent);
- Log.v("MainStadyServics", "shutDown serveice");
- }
- };
- /**打开绑定服务的Activity*/
- public Button.OnClickListener startBinderService = new Button.OnClickListener(){
- public void onClick(View view){
- /**单击按钮时启动服务*/
- Intent intent = new Intent(MainStadyServics.this,UseBrider.class);
- startActivity(intent);
- Log.v("MainStadyServics", "start Binder Service");
- }
- };
- /**打开广播学习的按钮*/
- public Button.OnClickListener broadcastReceiver = new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this,UseBroadcast.class);
- startActivity(intent);
- Log.v("MainStadyServics","start broadcast");
- }
- };
- /**打开通知*/
- public Button.OnClickListener notification = new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this, UseNotification.class);
- startActivity(intent);
- Log.v("MainStadyService ","start Notification");
- }
- };
- /**使用闹钟*/
- public Button.OnClickListener startAlarm = new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this, UseAlarmManager.class);
- startActivity(intent);
- Log.v("MainStadyService ","start alarm");
- }
- };
- public Button.OnClickListener handler= new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this, UseHandleMessage.class);
- startActivity(intent);
- Log.v("MainStadyService ","start handle");
- }
- };
- public Button.OnClickListener async= new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this, UseAsyncTask.class);
- startActivity(intent);
- Log.v("MainStadyService ","start handle");
- }
- };
- public Button.OnClickListener phonestate= new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this, UsePhoneState.class);
- startActivity(intent);
- Log.v("MainStadyService ","start phonestate");
- }
- };
- public Button.OnClickListener callphoneEvent= new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this, UseActionCall.class);
- startActivity(intent);
- Log.v("MainStadyService ","start callphone");
- }
- };
- public Button.OnClickListener vibrator= new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this, UseVibrator.class);
- startActivity(intent);
- Log.v("MainStadyService ","start callphone");
- }
- };
- /***/
- protected void onDestroy(){
- super.onDestroy();
- Intent intent = new Intent(MainStadyServics.this,CountService.class);
- /**退出Activity是,停止服务*/
- stopService(intent);
- }
- }
2.启动服务按钮
这个类实现的是第一个按钮的功能,在这个类中新开了一个线程,并每隔一秒打印出一行日志
代码如下:
- package lovefang.stadyService;
- /**引入包*/
- import android.app.Service;// 服务的类
- import android.os.IBinder;
- import android.os.Binder;
- import android.content.Intent;
- import android.util.Log;
- /**计数的服务*/
- public class CountService extends Service{
- /**创建参数*/
- boolean threadDisable ;
- int count;
- public IBinder onBind(Intent intent){
- return null;
- }
- public void onCreate(){
- super.onCreate();
- /**创建一个线程,每秒计数器加一,并在控制台进行Log输出*/
- new Thread(new Runnable(){
- public void run(){
- while(!threadDisable){
- try{
- Thread.sleep(1000);
- }catch(InterruptedException e){
- }
- count++;
- Log.v("CountService","Count is"+count);
- }
- }
- }).start();
- }
- public void onDestroy(){
- super.onDestroy();
- /**服务停止时,终止计数进程*/
- this.threadDisable = true;
- }
- public int getConunt(){
- return count;
- }
- class ServiceBinder extends Binder{
- public CountService getService(){
- return CountService.this;
- }
- }
- }
3.绑定服务
服务有两种实现的方法:
1.startService,启动服务,这时需要程序员管理服务的生命周期
2.bindService,绑定服务,此时Service与Activity绑定在一起
下面是实现的代码:
- package lovefang.stadyService;
- /**引入包*/
- import android.app.Activity;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.content.ServiceConnection;
- import android.os.Bundle;
- import android.os.IBinder;
- import android.util.Log;
- /**通过bindService和unBindSerivce的方式启动和结束服务*/
- public class UseBrider extends Activity {
- /**参数设置*/
- CountService countService;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(new UseBriderFace(this));
- Intent intent = new Intent(UseBrider.this,CountService.class);
- /**进入Activity开始服务*/
- bindService(intent, conn, Context.BIND_AUTO_CREATE);
- }
- private ServiceConnection conn = new ServiceConnection(){
- /**获取服务对象时的操作*/
- public void onServiceConnected(ComponentName name, IBinder service) {
- // TODO Auto-generated method stub
- countService = ((CountService.ServiceBinder)service).getService();
- }
- /**无法获取到服务对象时的操作*/
- public void onServiceDisconnected(ComponentName name) {
- // TODO Auto-generated method stub
- countService =null;
- }
- };
- protected void onDestroy(){
- super.onDestroy();
- this.unbindService(conn);
- Log.v("MainStadyServics", "out");
- }
- }
4.发送广播
使用sendBroadcast,向一个Action发送广播,并由相应的广播接收器接收并执行相应的动作
实现的代码如下:
4.1 打开广播服务
- package lovefang.stadyService;
- /**引入包*/
- import android.view.View;
- import android.os.Bundle;
- import android.app.Activity;
- import android.content.Intent;
- import android.widget.Button;
- /**使用Broadcast,这是一个发送广播的类*/
- public class UseBroadcast extends Activity{
- /**创建参数*/
- private Button sendBroadcast;
- /**创建Activity*/
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.broadcast);// 使用布局文件
- getView();
- sendBroadcast.setOnClickListener(sendBroadcastClick);// 添加事件监听
- }
- public void getView(){
- sendBroadcast = (Button)findViewById(R.id.sendBroadcast);
- }
- /**创建事件监听*/
- public Button.OnClickListener sendBroadcastClick = new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent();// 创建意图
- intent.putExtra("CONTENT", "This is a Braodcast demo");// 设置广播的内容
- intent.setAction("lovefang.stadyService");// 设置广播的Action
- sendBroadcast(intent);
- }
- };
- }
4.2 处理广播消息
- package lovefang.stadyService;
- /***/
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.util.Log;
- /**这是一个接收广播的类*/
- public class UseBroadcastReceiver extends BroadcastReceiver{
- public void onReceive(Context context, Intent intent){
- Log.v("UseBroadcastReceiver", "I get a message");
- }
- }
5.Notification
这个称之为通知,显示在手机的通知栏,用户可以清除,可以点击
实现的代码如下:
- package lovefang.stadyService;
- import android.content.Intent;
- import android.os.Bundle;
- import android.app.Activity;
- import android.app.Notification;
- import android.app.NotificationManager;
- import android.app.PendingIntent;
- import android.net.Uri;
- import android.media.RingtoneManager;
- import android.widget.Button;
- import android.view.View;
- /**使用notification*/
- public class UseNotification extends Activity {
- /**创建组件*/
- private Button textButton;
- private Button soundButton;// 声音通知
- private Button vibrateButton;// 震动通知
- private Button ledButton;// led通知
- private Button offButton;// 关闭通知
- NotificationManager notificationManager;
- /**创建Activity*/
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.notification);
- getComment();
- registerComment();
- }
- /**获取对象*/
- public void getComment(){
- /**获取Notification对象*/
- notificationManager = (NotificationManager)this.getSystemService(NOTIFICATION_SERVICE);
- textButton = (Button)findViewById(R.id.notificationMessage);
- soundButton =(Button)findViewById(R.id.notificationSound);
- vibrateButton = (Button)findViewById(R.id.notificationVibrate);
- ledButton = (Button)findViewById(R.id.notificationLED);
- offButton = (Button)findViewById(R.id.offnotification);
- }
- /**注册对象*/
- public void registerComment(){
- textButton.setOnClickListener(notificationMessage);
- soundButton.setOnClickListener(notificationSound);
- vibrateButton.setOnClickListener(notificationVibrate);
- ledButton.setOnClickListener(notificationLed);
- offButton.setOnClickListener(notificationOff);
- }
- public Button.OnClickListener notificationMessage = new Button.OnClickListener(){
- public void onClick(View view){
- Notification notification = new Notification();// 创建Notification对象
- notification.icon = R.drawable.icon;
- notification.tickerText = "This is text notication";// 设置通知消息
- /**单击通知后的Intent,此例子单击后还是在当前页面*/
- PendingIntent intent = PendingIntent
- .getActivity(UseNotification.this,
- 0, new Intent(UseNotification.this,UseNotification.class)
- , 0);
- /**设置通知消息*/
- notification.setLatestEventInfo(UseNotification.this
- ,"Notification","Content of Notification Demo",intent);
- /**执行通知*/
- notificationManager.notify(0, notification);
- }
- };
- public Button.OnClickListener notificationSound = new Button.OnClickListener(){
- public void onClick(View view){
- /**创建通知对象*/
- Notification notification = new Notification();
- /**获取系统当前声音*/
- String ringName = RingtoneManager.getActualDefaultRingtoneUri(
- UseNotification.this, RingtoneManager.TYPE_RINGTONE)
- .toString();
- /**设置系统当前铃声为此通知的铃声*/
- notification.sound = Uri.parse(ringName);
- /**执行通知*/
- notificationManager.notify(0,notification);
- }
- };
- /**震动通知*/
- public Button.OnClickListener notificationVibrate = new Button.OnClickListener(){
- public void onClick(View view){
- Notification notification = new Notification();// 创建Notification对象
- notification.vibrate = new long[] {0, 100, 200, 300};// 设置通知震动模式
- notificationManager.notify(0,notification);// 执行通知
- }
- };
- /**LED通知*/
- public Button.OnClickListener notificationLed = new Button.OnClickListener(){
- public void onClick(View view){
- Notification notification = new Notification();// 创建Notification对象
- notification.ledOnMS = 300;// 设置led开始闪光的时间
- notification.ledOffMS = 1000;// 设置关闭时的闪光时间
- notificationManager.notify(0,notification);// 执行通知
- }
- };
- /**关闭通知*/
- public Button.OnClickListener notificationOff = new Button.OnClickListener(){
- public void onClick(View view){
- notificationManager.cancel(0);// 关闭通知
- }
- };
- }
6.Alarm
闹钟服务
- package lovefang.stadyService;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.Button;
- import android.view.View;
- import android.app.AlarmManager;
- import java.util.Calendar;
- public class UseAlarmManager extends Activity {
- /**创建参数*/
- private Button startAlarm;
- private Button shutdownAlarm;
- private AlarmManager alarm;
- /**创建Activity*/
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.usealarmmanager);
- getWidget();
- }
- public void getWidget(){
- startAlarm = (Button)findViewById(R.id.startAlarm);
- shutdownAlarm = (Button)findViewById(R.id.shutDowntAlarm);
- alarm = (AlarmManager)getSystemService(ALARM_SERVICE);// 获取AlarmManager
- }
- public void registerWidget(){
- startAlarm.setOnClickListener(startAlarms);
- shutdownAlarm.setOnClickListener(shutdownAlarms);
- }
- /**启动闹钟*/
- public Button.OnClickListener startAlarms = new Button.OnClickListener(){
- public void onClick(View view){
- // 设置10秒后出发闹钟
- Calendar calendar = Calendar.getInstance();
- calendar.setTimeInMillis(System.currentTimeMillis());// 设置calendar的时间
- calendar.add(Calendar.SECOND, 10);
- alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), null);
- }
- };
- public Button.OnClickListener shutdownAlarms = new Button.OnClickListener(){
- public void onClick(View view){
- alarm.cancel(null);
- }
- };
- }
7.获取手机的状态
这个功能实现的是获取用户手机的一些定义的信息
- package lovefang.stadyService;
- /**引入包*/
- import android.os.Bundle;
- import android.app.Activity;
- import android.app.Service;
- import android.view.View;
- import android.widget.Button;
- import android.widget.TextView;
- import android.content.ContentResolver;//This class provides applications access to the content model.
- import android.telephony.TelephonyManager;
- import android.util.Log;
- /**获取手机的状态*/
- public class UsePhoneState extends Activity{
- /**创建参数*/
- private ContentResolver cr;
- private Button getStateButton;// 用来获取用户的手机状态
- /**创建Activity*/
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.usephonestate);
- cr = getContentResolver();
- Log.v("UsePhonestate","cr = getContentResolver()");
- Log.v("UsePhonestate","setContentView");
- getStateButton = (Button) findViewById(R.id.button_getphonestate);
- Log.v("UsePhonestate","getStateButton");
- getStateButton.setOnClickListener(getState);
- Log.v("UsePhonestate","getStateButton.setOnClickListener");
- }
- private Button.OnClickListener getState = new Button.OnClickListener(){
- public void onClick(View view){
- /**获得TelephonyManager对象*/
- TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Service.TELEPHONY_SERVICE);
- /**获取电信网络级别*/
- String teleCode = telephonyManager.getNetworkCountryIso();
- /**获取电信网络公司代码*/
- String teleComCode = telephonyManager.getNetworkOperator();
- /**获取电信网络公司名称*/
- String teleComName = telephonyManager.getNetworkOperatorName();
- /**获取行动通信类型*/
- int TypeCode = telephonyManager.getPhoneType();
- String type = "";
- switch(TypeCode){
- case TelephonyManager.PHONE_TYPE_NONE:
- type = "PHONE_TYPE_NONE";
- break;
- case TelephonyManager.PHONE_TYPE_GSM:
- type = "PHONE_TYPE_GSM";
- break;
- case TelephonyManager.PHONE_TYPE_CDMA:
- type = "PHONE_TYPE_CDMA";
- break;
- }
- /**获取网络类型*/
- int netTypeCode = telephonyManager.getNetworkType();
- String netType = "NETWORK_TYPE_UNKNOW";
- switch(netTypeCode){
- case TelephonyManager.NETWORK_TYPE_1xRTT:
- netType = "NETWORK_TYPE_1xRTT";
- break;
- case TelephonyManager.NETWORK_TYPE_CDMA:
- netType = "NETWORK_TYPE_CDMA";
- break;
- case TelephonyManager.NETWORK_TYPE_EDGE:
- netType = "NETWORK_TYPE_EDGE";
- break;
- case TelephonyManager.NETWORK_TYPE_EVDO_0:
- netType = "NETWORK_TYPE_EVDO_0";
- break;
- case TelephonyManager.NETWORK_TYPE_EVDO_A:
- netType = "NETWORK_TYPE_EVDO_A";
- break;
- case TelephonyManager.NETWORK_TYPE_GPRS:
- netType = "NETWORK_TYPE_GPRS";
- break;
- case TelephonyManager.NETWORK_TYPE_HSDPA:
- netType = "NETWORK_TYPE_HSDPA";
- break;
- case TelephonyManager.NETWORK_TYPE_HSPA:
- netType = "NETWORK_TYPE_HSPA";
- break;
- case TelephonyManager.NETWORK_TYPE_HSUPA:
- netType = "NETWORK_TYPE_HSUPA";
- break;
- case TelephonyManager.NETWORK_TYPE_IDEN:
- netType = "NETWORK_TYPE_IDEN";
- break;
- case TelephonyManager.NETWORK_TYPE_UMTS:
- netType = "NETWORK_TYPE_UMTS";
- break;
- default:
- break;
- }
- /**获取漫游状态*/
- boolean roamStatusCode = telephonyManager.isNetworkRoaming();
- String roamStatus = "NOT ROAMINF";
- if(roamStatusCode){
- roamStatus = "ROAMING";
- }
- /**获取手机唯一标识*/
- String imei = telephonyManager.getDeviceId();
- /**获取手机IMEI SV*/
- String imeiSV = telephonyManager.getDeviceSoftwareVersion();
- /**获取手机IMSI*/
- String imsi = telephonyManager.getSubscriberId();
- /**蓝牙服务*/
- String statusCode = android.provider.Settings.System.getString(cr,
- android.provider.Settings.System.BLUETOOTH_ON);
- String bulettothStatus = "";
- if(statusCode.equals("1")){
- bulettothStatus = "ENABLE";
- }else{
- bulettothStatus = "DISABLE";
- }
- /**飞行模式是否打开*/
- statusCode = android.provider.Settings.System.getString(cr,
- android.provider.Settings.System.AIRPLANE_MODE_ON);
- String AirplaneStatus = "";
- if(statusCode.equals("1")){
- AirplaneStatus = "ENABLE";
- }else{
- AirplaneStatus = "DISABLE";
- }
- /**数据漫游模式是否打开*/
- statusCode = android.provider.Settings.System.getString(cr,
- android.provider.Settings.System.DATA_ROAMING);
- String dataRoamStatus = "";
- if(statusCode.equals("1")){
- dataRoamStatus = "ENABLE";
- }else{
- dataRoamStatus = "DISABLE";
- }
- TextView txt = (TextView) findViewById(R.id.text_showphonestate);
- StringBuilder sb = new StringBuilder();
- sb.append("teleCode: "+teleCode+"\n");
- sb.append("teleComCode: "+teleComCode+"\n");
- sb.append("teleComName: "+teleComName+"\n");
- sb.append("type: "+type+"\n");
- sb.append("netType: "+netType+"\n");
- sb.append("roamStatus: "+roamStatus+"\n");
- sb.append("imei: "+imei+"\n");
- sb.append("imeiSV: "+imeiSV+"\n");
- sb.append("imsi: "+imsi+"\n");
- sb.append("bulettothStatus: "+bulettothStatus+"\n");
- sb.append("AirplaneStatus: "+AirplaneStatus+"\n");
- sb.append("dataRoamStatus: "+dataRoamStatus+"\n");
- txt.setText(sb.toString());
- }
- };
- }
8.Vibrator
震动功能,实现对手机震动的管理
- package lovefang.stadyService;
- /***/
- import android.os.Bundle;
- import android.os.Vibrator;
- import android.app.Activity;
- import android.view.View;
- import android.content.Context;
- import android.widget.Button;
- /**如何实现手机的震动提示Vibrator*/
- public class UseVibrator extends Activity{
- /***/
- private Button vibrator_1_Button;
- private Button vibrator_2_Button;
- private Button vibrator_3_Button;
- private Vibrator vibrator;
- /***/
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.use_vibrator);
- vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
- getWidget();
- registerWidget();
- }
- public void getWidget(){
- vibrator_1_Button = (Button) findViewById(R.id.button_vibrator_1);
- vibrator_2_Button = (Button) findViewById(R.id.button_vibrator_2);
- vibrator_3_Button = (Button) findViewById(R.id.button_vibrator_3);
- }
- public void registerWidget(){
- vibrator_1_Button.setOnClickListener(vibrator_1);
- vibrator_2_Button.setOnClickListener(vibrator_2);
- vibrator_3_Button.setOnClickListener(vibrator_3);
- }
- /**震动一次*/
- public Button.OnClickListener vibrator_1 = new Button.OnClickListener(){
- public void onClick(View view){
- /**long参数数组里大参数的含义*/
- /**第一个参数表示等待100毫秒后开始震动*/
- /**第二个参数表示震动100毫秒后停止震动*/
- vibrator.vibrate(new long[]{100,100}, 0);
- }
- };
- /**震动两次*/
- public Button.OnClickListener vibrator_2 = new Button.OnClickListener(){
- public void onClick(View view){
- vibrator.vibrate(new long[]{1000,3000,1000,3000}, 0);
- }
- };
- /**震动三次*/
- public Button.OnClickListener vibrator_3 = new Button.OnClickListener(){
- public void onClick(View view){
- vibrator.vibrate(new long[]{1000,1000,1000,2000,1000,300}, 0);
- }
- };
- }
说明:这个例子实现了Android中常见的许多服务,下面是实现的截图
接下来,以源代码的方式分析这个例子
1.MainActivity--主界面
这个类主要是实现用户所看到的这个Activity,其中包含了一系列的按钮,用户点击按钮执行相应的动作,所以在这个类中主要是对按钮的定义和对按钮绑定相应的监听器,下面是实现的代码:
- package lovefang.stadyService;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.Button;
- import android.view.View;
- import android.content.Intent;
- import android.util.Log;
- /**这是使用后台服务的学习例子*/
- public class MainStadyServics extends Activity {
- /**参数设置*/
- Button startServiceButton;// 启动服务按钮
- Button shutDownServiceButton;// 关闭服务按钮
- Button startBindServiceButton;// 启动绑定服务按钮
- Button sendBroadcast;// 使用广播
- Button notificationButton;// 使用通知功能
- Button alarmButton;// 使用闹钟
- Button handlerButton;// 使用handler
- Button asyncButton;// 使用异步加载
- Button phoneStateButton;// 查看手机状态
- Button callphoneButton;// 拨打电话
- Button vibratorButton;// 使用震动
- CountService countService;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Log.v("MainStadyServics", "setContentView");
- setContentView(R.layout.main);
- getWidget();
- regiestListener();
- }
- /**获得组件*/
- public void getWidget(){
- startServiceButton = (Button)findViewById(R.id.startServerButton);
- startBindServiceButton = (Button)findViewById(R.id.startBindServerButton);
- shutDownServiceButton = (Button)findViewById(R.id.sutdownServerButton);
- sendBroadcast = (Button)findViewById(R.id.sendBroadcast);
- notificationButton = (Button)findViewById(R.id.notification);
- alarmButton = (Button)findViewById(R.id.alarm);
- handlerButton = (Button)findViewById(R.id.handler);
- asyncButton = (Button)findViewById(R.id.async);
- phoneStateButton = (Button) findViewById(R.id.phonestate);
- callphoneButton = (Button) findViewById(R.id.callphone);
- vibratorButton = (Button) findViewById(R.id.vibrator);
- }
- /**为按钮添加监听*/
- public void regiestListener(){
- startServiceButton.setOnClickListener(startService);
- shutDownServiceButton.setOnClickListener(shutdownService);
- startBindServiceButton.setOnClickListener(startBinderService);
- sendBroadcast.setOnClickListener(broadcastReceiver);
- notificationButton.setOnClickListener(notification);
- alarmButton.setOnClickListener(startAlarm);
- handlerButton.setOnClickListener(handler);
- asyncButton.setOnClickListener(async);
- phoneStateButton.setOnClickListener(phonestate);
- callphoneButton.setOnClickListener(callphoneEvent);
- vibratorButton.setOnClickListener(vibrator);
- }
- /**启动服务的事件监听*/
- public Button.OnClickListener startService = new Button.OnClickListener(){
- public void onClick(View view){
- /**单击按钮时启动服务*/
- Intent intent = new Intent(MainStadyServics.this,CountService.class);
- startService(intent);
- Log.v("MainStadyServics", "start Service");
- }
- };
- /**关闭服务*/
- public Button.OnClickListener shutdownService = new Button.OnClickListener(){
- public void onClick(View view){
- /**单击按钮时启动服务*/
- Intent intent = new Intent(MainStadyServics.this,CountService.class);
- /**退出Activity是,停止服务*/
- stopService(intent);
- Log.v("MainStadyServics", "shutDown serveice");
- }
- };
- /**打开绑定服务的Activity*/
- public Button.OnClickListener startBinderService = new Button.OnClickListener(){
- public void onClick(View view){
- /**单击按钮时启动服务*/
- Intent intent = new Intent(MainStadyServics.this,UseBrider.class);
- startActivity(intent);
- Log.v("MainStadyServics", "start Binder Service");
- }
- };
- /**打开广播学习的按钮*/
- public Button.OnClickListener broadcastReceiver = new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this,UseBroadcast.class);
- startActivity(intent);
- Log.v("MainStadyServics","start broadcast");
- }
- };
- /**打开通知*/
- public Button.OnClickListener notification = new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this, UseNotification.class);
- startActivity(intent);
- Log.v("MainStadyService ","start Notification");
- }
- };
- /**使用闹钟*/
- public Button.OnClickListener startAlarm = new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this, UseAlarmManager.class);
- startActivity(intent);
- Log.v("MainStadyService ","start alarm");
- }
- };
- public Button.OnClickListener handler= new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this, UseHandleMessage.class);
- startActivity(intent);
- Log.v("MainStadyService ","start handle");
- }
- };
- public Button.OnClickListener async= new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this, UseAsyncTask.class);
- startActivity(intent);
- Log.v("MainStadyService ","start handle");
- }
- };
- public Button.OnClickListener phonestate= new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this, UsePhoneState.class);
- startActivity(intent);
- Log.v("MainStadyService ","start phonestate");
- }
- };
- public Button.OnClickListener callphoneEvent= new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this, UseActionCall.class);
- startActivity(intent);
- Log.v("MainStadyService ","start callphone");
- }
- };
- public Button.OnClickListener vibrator= new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent(MainStadyServics.this, UseVibrator.class);
- startActivity(intent);
- Log.v("MainStadyService ","start callphone");
- }
- };
- /***/
- protected void onDestroy(){
- super.onDestroy();
- Intent intent = new Intent(MainStadyServics.this,CountService.class);
- /**退出Activity是,停止服务*/
- stopService(intent);
- }
- }
2.启动服务按钮
这个类实现的是第一个按钮的功能,在这个类中新开了一个线程,并每隔一秒打印出一行日志
代码如下:
- package lovefang.stadyService;
- /**引入包*/
- import android.app.Service;// 服务的类
- import android.os.IBinder;
- import android.os.Binder;
- import android.content.Intent;
- import android.util.Log;
- /**计数的服务*/
- public class CountService extends Service{
- /**创建参数*/
- boolean threadDisable ;
- int count;
- public IBinder onBind(Intent intent){
- return null;
- }
- public void onCreate(){
- super.onCreate();
- /**创建一个线程,每秒计数器加一,并在控制台进行Log输出*/
- new Thread(new Runnable(){
- public void run(){
- while(!threadDisable){
- try{
- Thread.sleep(1000);
- }catch(InterruptedException e){
- }
- count++;
- Log.v("CountService","Count is"+count);
- }
- }
- }).start();
- }
- public void onDestroy(){
- super.onDestroy();
- /**服务停止时,终止计数进程*/
- this.threadDisable = true;
- }
- public int getConunt(){
- return count;
- }
- class ServiceBinder extends Binder{
- public CountService getService(){
- return CountService.this;
- }
- }
- }
3.绑定服务
服务有两种实现的方法:
1.startService,启动服务,这时需要程序员管理服务的生命周期
2.bindService,绑定服务,此时Service与Activity绑定在一起
下面是实现的代码:
- package lovefang.stadyService;
- /**引入包*/
- import android.app.Activity;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.content.ServiceConnection;
- import android.os.Bundle;
- import android.os.IBinder;
- import android.util.Log;
- /**通过bindService和unBindSerivce的方式启动和结束服务*/
- public class UseBrider extends Activity {
- /**参数设置*/
- CountService countService;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(new UseBriderFace(this));
- Intent intent = new Intent(UseBrider.this,CountService.class);
- /**进入Activity开始服务*/
- bindService(intent, conn, Context.BIND_AUTO_CREATE);
- }
- private ServiceConnection conn = new ServiceConnection(){
- /**获取服务对象时的操作*/
- public void onServiceConnected(ComponentName name, IBinder service) {
- // TODO Auto-generated method stub
- countService = ((CountService.ServiceBinder)service).getService();
- }
- /**无法获取到服务对象时的操作*/
- public void onServiceDisconnected(ComponentName name) {
- // TODO Auto-generated method stub
- countService =null;
- }
- };
- protected void onDestroy(){
- super.onDestroy();
- this.unbindService(conn);
- Log.v("MainStadyServics", "out");
- }
- }
4.发送广播
使用sendBroadcast,向一个Action发送广播,并由相应的广播接收器接收并执行相应的动作
实现的代码如下:
4.1 打开广播服务
- package lovefang.stadyService;
- /**引入包*/
- import android.view.View;
- import android.os.Bundle;
- import android.app.Activity;
- import android.content.Intent;
- import android.widget.Button;
- /**使用Broadcast,这是一个发送广播的类*/
- public class UseBroadcast extends Activity{
- /**创建参数*/
- private Button sendBroadcast;
- /**创建Activity*/
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.broadcast);// 使用布局文件
- getView();
- sendBroadcast.setOnClickListener(sendBroadcastClick);// 添加事件监听
- }
- public void getView(){
- sendBroadcast = (Button)findViewById(R.id.sendBroadcast);
- }
- /**创建事件监听*/
- public Button.OnClickListener sendBroadcastClick = new Button.OnClickListener(){
- public void onClick(View view){
- Intent intent = new Intent();// 创建意图
- intent.putExtra("CONTENT", "This is a Braodcast demo");// 设置广播的内容
- intent.setAction("lovefang.stadyService");// 设置广播的Action
- sendBroadcast(intent);
- }
- };
- }
4.2 处理广播消息
- package lovefang.stadyService;
- /***/
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.util.Log;
- /**这是一个接收广播的类*/
- public class UseBroadcastReceiver extends BroadcastReceiver{
- public void onReceive(Context context, Intent intent){
- Log.v("UseBroadcastReceiver", "I get a message");
- }
- }
5.Notification
这个称之为通知,显示在手机的通知栏,用户可以清除,可以点击
实现的代码如下:
- package lovefang.stadyService;
- import android.content.Intent;
- import android.os.Bundle;
- import android.app.Activity;
- import android.app.Notification;
- import android.app.NotificationManager;
- import android.app.PendingIntent;
- import android.net.Uri;
- import android.media.RingtoneManager;
- import android.widget.Button;
- import android.view.View;
- /**使用notification*/
- public class UseNotification extends Activity {
- /**创建组件*/
- private Button textButton;
- private Button soundButton;// 声音通知
- private Button vibrateButton;// 震动通知
- private Button ledButton;// led通知
- private Button offButton;// 关闭通知
- NotificationManager notificationManager;
- /**创建Activity*/
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.notification);
- getComment();
- registerComment();
- }
- /**获取对象*/
- public void getComment(){
- /**获取Notification对象*/
- notificationManager = (NotificationManager)this.getSystemService(NOTIFICATION_SERVICE);
- textButton = (Button)findViewById(R.id.notificationMessage);
- soundButton =(Button)findViewById(R.id.notificationSound);
- vibrateButton = (Button)findViewById(R.id.notificationVibrate);
- ledButton = (Button)findViewById(R.id.notificationLED);
- offButton = (Button)findViewById(R.id.offnotification);
- }
- /**注册对象*/
- public void registerComment(){
- textButton.setOnClickListener(notificationMessage);
- soundButton.setOnClickListener(notificationSound);
- vibrateButton.setOnClickListener(notificationVibrate);
- ledButton.setOnClickListener(notificationLed);
- offButton.setOnClickListener(notificationOff);
- }
- public Button.OnClickListener notificationMessage = new Button.OnClickListener(){
- public void onClick(View view){
- Notification notification = new Notification();// 创建Notification对象
- notification.icon = R.drawable.icon;
- notification.tickerText = "This is text notication";// 设置通知消息
- /**单击通知后的Intent,此例子单击后还是在当前页面*/
- PendingIntent intent = PendingIntent
- .getActivity(UseNotification.this,
- 0, new Intent(UseNotification.this,UseNotification.class)
- , 0);
- /**设置通知消息*/
- notification.setLatestEventInfo(UseNotification.this
- ,"Notification","Content of Notification Demo",intent);
- /**执行通知*/
- notificationManager.notify(0, notification);
- }
- };
- public Button.OnClickListener notificationSound = new Button.OnClickListener(){
- public void onClick(View view){
- /**创建通知对象*/
- Notification notification = new Notification();
- /**获取系统当前声音*/
- String ringName = RingtoneManager.getActualDefaultRingtoneUri(
- UseNotification.this, RingtoneManager.TYPE_RINGTONE)
- .toString();
- /**设置系统当前铃声为此通知的铃声*/
- notification.sound = Uri.parse(ringName);
- /**执行通知*/
- notificationManager.notify(0,notification);
- }
- };
- /**震动通知*/
- public Button.OnClickListener notificationVibrate = new Button.OnClickListener(){
- public void onClick(View view){
- Notification notification = new Notification();// 创建Notification对象
- notification.vibrate = new long[] {0, 100, 200, 300};// 设置通知震动模式
- notificationManager.notify(0,notification);// 执行通知
- }
- };
- /**LED通知*/
- public Button.OnClickListener notificationLed = new Button.OnClickListener(){
- public void onClick(View view){
- Notification notification = new Notification();// 创建Notification对象
- notification.ledOnMS = 300;// 设置led开始闪光的时间
- notification.ledOffMS = 1000;// 设置关闭时的闪光时间
- notificationManager.notify(0,notification);// 执行通知
- }
- };
- /**关闭通知*/
- public Button.OnClickListener notificationOff = new Button.OnClickListener(){
- public void onClick(View view){
- notificationManager.cancel(0);// 关闭通知
- }
- };
- }
6.Alarm
闹钟服务
- package lovefang.stadyService;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.Button;
- import android.view.View;
- import android.app.AlarmManager;
- import java.util.Calendar;
- public class UseAlarmManager extends Activity {
- /**创建参数*/
- private Button startAlarm;
- private Button shutdownAlarm;
- private AlarmManager alarm;
- /**创建Activity*/
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.usealarmmanager);
- getWidget();
- }
- public void getWidget(){
- startAlarm = (Button)findViewById(R.id.startAlarm);
- shutdownAlarm = (Button)findViewById(R.id.shutDowntAlarm);
- alarm = (AlarmManager)getSystemService(ALARM_SERVICE);// 获取AlarmManager
- }
- public void registerWidget(){
- startAlarm.setOnClickListener(startAlarms);
- shutdownAlarm.setOnClickListener(shutdownAlarms);
- }
- /**启动闹钟*/
- public Button.OnClickListener startAlarms = new Button.OnClickListener(){
- public void onClick(View view){
- // 设置10秒后出发闹钟
- Calendar calendar = Calendar.getInstance();
- calendar.setTimeInMillis(System.currentTimeMillis());// 设置calendar的时间
- calendar.add(Calendar.SECOND, 10);
- alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), null);
- }
- };
- public Button.OnClickListener shutdownAlarms = new Button.OnClickListener(){
- public void onClick(View view){
- alarm.cancel(null);
- }
- };
- }
7.获取手机的状态
这个功能实现的是获取用户手机的一些定义的信息
- package lovefang.stadyService;
- /**引入包*/
- import android.os.Bundle;
- import android.app.Activity;
- import android.app.Service;
- import android.view.View;
- import android.widget.Button;
- import android.widget.TextView;
- import android.content.ContentResolver;//This class provides applications access to the content model.
- import android.telephony.TelephonyManager;
- import android.util.Log;
- /**获取手机的状态*/
- public class UsePhoneState extends Activity{
- /**创建参数*/
- private ContentResolver cr;
- private Button getStateButton;// 用来获取用户的手机状态
- /**创建Activity*/
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.usephonestate);
- cr = getContentResolver();
- Log.v("UsePhonestate","cr = getContentResolver()");
- Log.v("UsePhonestate","setContentView");
- getStateButton = (Button) findViewById(R.id.button_getphonestate);
- Log.v("UsePhonestate","getStateButton");
- getStateButton.setOnClickListener(getState);
- Log.v("UsePhonestate","getStateButton.setOnClickListener");
- }
- private Button.OnClickListener getState = new Button.OnClickListener(){
- public void onClick(View view){
- /**获得TelephonyManager对象*/
- TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Service.TELEPHONY_SERVICE);
- /**获取电信网络级别*/
- String teleCode = telephonyManager.getNetworkCountryIso();
- /**获取电信网络公司代码*/
- String teleComCode = telephonyManager.getNetworkOperator();
- /**获取电信网络公司名称*/
- String teleComName = telephonyManager.getNetworkOperatorName();
- /**获取行动通信类型*/
- int TypeCode = telephonyManager.getPhoneType();
- String type = "";
- switch(TypeCode){
- case TelephonyManager.PHONE_TYPE_NONE:
- type = "PHONE_TYPE_NONE";
- break;
- case TelephonyManager.PHONE_TYPE_GSM:
- type = "PHONE_TYPE_GSM";
- break;
- case TelephonyManager.PHONE_TYPE_CDMA:
- type = "PHONE_TYPE_CDMA";
- break;
- }
- /**获取网络类型*/
- int netTypeCode = telephonyManager.getNetworkType();
- String netType = "NETWORK_TYPE_UNKNOW";
- switch(netTypeCode){
- case TelephonyManager.NETWORK_TYPE_1xRTT:
- netType = "NETWORK_TYPE_1xRTT";
- break;
- case TelephonyManager.NETWORK_TYPE_CDMA:
- netType = "NETWORK_TYPE_CDMA";
- break;
- case TelephonyManager.NETWORK_TYPE_EDGE:
- netType = "NETWORK_TYPE_EDGE";
- break;
- case TelephonyManager.NETWORK_TYPE_EVDO_0:
- netType = "NETWORK_TYPE_EVDO_0";
- break;
- case TelephonyManager.NETWORK_TYPE_EVDO_A:
- netType = "NETWORK_TYPE_EVDO_A";
- break;
- case TelephonyManager.NETWORK_TYPE_GPRS:
- netType = "NETWORK_TYPE_GPRS";
- break;
- case TelephonyManager.NETWORK_TYPE_HSDPA:
- netType = "NETWORK_TYPE_HSDPA";
- break;
- case TelephonyManager.NETWORK_TYPE_HSPA:
- netType = "NETWORK_TYPE_HSPA";
- break;
- case TelephonyManager.NETWORK_TYPE_HSUPA:
- netType = "NETWORK_TYPE_HSUPA";
- break;
- case TelephonyManager.NETWORK_TYPE_IDEN:
- netType = "NETWORK_TYPE_IDEN";
- break;
- case TelephonyManager.NETWORK_TYPE_UMTS:
- netType = "NETWORK_TYPE_UMTS";
- break;
- default:
- break;
- }
- /**获取漫游状态*/
- boolean roamStatusCode = telephonyManager.isNetworkRoaming();
- String roamStatus = "NOT ROAMINF";
- if(roamStatusCode){
- roamStatus = "ROAMING";
- }
- /**获取手机唯一标识*/
- String imei = telephonyManager.getDeviceId();
- /**获取手机IMEI SV*/
- String imeiSV = telephonyManager.getDeviceSoftwareVersion();
- /**获取手机IMSI*/
- String imsi = telephonyManager.getSubscriberId();
- /**蓝牙服务*/
- String statusCode = android.provider.Settings.System.getString(cr,
- android.provider.Settings.System.BLUETOOTH_ON);
- String bulettothStatus = "";
- if(statusCode.equals("1")){
- bulettothStatus = "ENABLE";
- }else{
- bulettothStatus = "DISABLE";
- }
- /**飞行模式是否打开*/
- statusCode = android.provider.Settings.System.getString(cr,
- android.provider.Settings.System.AIRPLANE_MODE_ON);
- String AirplaneStatus = "";
- if(statusCode.equals("1")){
- AirplaneStatus = "ENABLE";
- }else{
- AirplaneStatus = "DISABLE";
- }
- /**数据漫游模式是否打开*/
- statusCode = android.provider.Settings.System.getString(cr,
- android.provider.Settings.System.DATA_ROAMING);
- String dataRoamStatus = "";
- if(statusCode.equals("1")){
- dataRoamStatus = "ENABLE";
- }else{
- dataRoamStatus = "DISABLE";
- }
- TextView txt = (TextView) findViewById(R.id.text_showphonestate);
- StringBuilder sb = new StringBuilder();
- sb.append("teleCode: "+teleCode+"\n");
- sb.append("teleComCode: "+teleComCode+"\n");
- sb.append("teleComName: "+teleComName+"\n");
- sb.append("type: "+type+"\n");
- sb.append("netType: "+netType+"\n");
- sb.append("roamStatus: "+roamStatus+"\n");
- sb.append("imei: "+imei+"\n");
- sb.append("imeiSV: "+imeiSV+"\n");
- sb.append("imsi: "+imsi+"\n");
- sb.append("bulettothStatus: "+bulettothStatus+"\n");
- sb.append("AirplaneStatus: "+AirplaneStatus+"\n");
- sb.append("dataRoamStatus: "+dataRoamStatus+"\n");
- txt.setText(sb.toString());
- }
- };
- }
8.Vibrator
震动功能,实现对手机震动的管理
- package lovefang.stadyService;
- /***/
- import android.os.Bundle;
- import android.os.Vibrator;
- import android.app.Activity;
- import android.view.View;
- import android.content.Context;
- import android.widget.Button;
- /**如何实现手机的震动提示Vibrator*/
- public class UseVibrator extends Activity{
- /***/
- private Button vibrator_1_Button;
- private Button vibrator_2_Button;
- private Button vibrator_3_Button;
- private Vibrator vibrator;
- /***/
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.use_vibrator);
- vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
- getWidget();
- registerWidget();
- }
- public void getWidget(){
- vibrator_1_Button = (Button) findViewById(R.id.button_vibrator_1);
- vibrator_2_Button = (Button) findViewById(R.id.button_vibrator_2);
- vibrator_3_Button = (Button) findViewById(R.id.button_vibrator_3);
- }
- public void registerWidget(){
- vibrator_1_Button.setOnClickListener(vibrator_1);
- vibrator_2_Button.setOnClickListener(vibrator_2);
- vibrator_3_Button.setOnClickListener(vibrator_3);
- }
- /**震动一次*/
- public Button.OnClickListener vibrator_1 = new Button.OnClickListener(){
- public void onClick(View view){
- /**long参数数组里大参数的含义*/
- /**第一个参数表示等待100毫秒后开始震动*/
- /**第二个参数表示震动100毫秒后停止震动*/
- vibrator.vibrate(new long[]{100,100}, 0);
- }
- };
- /**震动两次*/
- public Button.OnClickListener vibrator_2 = new Button.OnClickListener(){
- public void onClick(View view){
- vibrator.vibrate(new long[]{1000,3000,1000,3000}, 0);
- }
- };
- /**震动三次*/
- public Button.OnClickListener vibrator_3 = new Button.OnClickListener(){
- public void onClick(View view){
- vibrator.vibrate(new long[]{1000,1000,1000,2000,1000,300}, 0);
- }
- };
- }