您好,登錄后才能下訂單哦!
本篇內容主要講解“Android中的服務怎么實現”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Android中的服務怎么實現”吧!
說明:這個例子實現了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"); } }
接下來為您介紹發送廣播、Notification通知、Alarm 鬧鐘等服務的具體內容
4.發送廣播
使用sendBroadcast,向一個Action發送廣播,并由相應的廣播接收器接收并執行相應的動作
實現的代碼如下:
(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); } }; }
(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); } }; }
下頁將為您介紹獲取手機的狀態、Vibrator 震動功能等服務的具體內容
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中的服務怎么實現”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。