今天在网站看了一系列例子。太棒了。。。

我收藏了哦。

实现了Android中常见的许多服务,下面是实现的截图


接下来,以源代码的方式分析这个例子


1.MainActivity--主界面

这个类主要是实现用户所看到的这个Activity,其中包含了一系列的按钮,用户点击按钮执行相应的动作,所以在这个类中主要是对按钮的定义和对按钮绑定相应的监听器,下面是实现的代码:

[java] view plaincopy

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.启动服务按钮

这个类实现的是第一个按钮的功能,在这个类中新开了一个线程,并每隔一秒打印出一行日志

代码如下:

[java] view plaincopy

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绑定在一起

下面是实现的代码:

[java] view plaincopy

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 打开广播服务

[java] view plaincopy

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 处理广播消息

[java] view plaincopy

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

这个称之为通知,显示在手机的通知栏,用户可以清除,可以点击

实现的代码如下:

[java] view plaincopy

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

闹钟服务

[java] view plaincopy

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.获取手机的状态

这个功能实现的是获取用户手机的一些定义的信息

[java] view plaincopy

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";
}

/**http://www.jfong.cn/ -获取手机唯一标识*/
String imei = telephonyManager.getDeviceId();
/**获取手机IMEI SV*/
String imeiSV = telephonyManager.getDeviceSoftwareVersion();
/**获取手机IMSI*/
String imsi = telephonyManager.getSubscriberId();

/**http://www.qi788.com/ -蓝牙服务*/
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

震动功能,实现对手机震动的管理

[java] view plaincopy

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);
}
};
}

更多相关文章

  1. Android通过URI获取文件路径
  2. android获取手机号码与IMEI码
  3. android dp sp px区别,android获取屏幕尺寸、密度
  4. Android从系统Gallery获取图片具体实现
  5. 以php开发服务器后台的android即时通讯app的一种实现思路
  6. Android(安卓)前置摄像头调试纪要
  7. Android技术路线图
  8. Android中application取值为空
  9. Android(安卓)Service 通知Activity更新界面的方法研究|Service

随机推荐

  1. 准备研究一下Android手机开发
  2. Android 在线SDK更新 和谐被墙解决
  3. 关于替换软件盘的换行为搜索
  4. 好的学习android的网址
  5. Android调用系统拍摄视频
  6. Android Bitmap 倒影
  7. 重要网址
  8. Bug处理 java.lang.IllegalStateExceptio
  9. Android使用SDK方法详解
  10. android 广播 调用三方应用