Android基礎及應用 Service的使用
一、實驗目的
1. 瞭解Service的原理和用途;
2. 掌握本地服務的管理方法;
3. 掌握遠端服務的繫結和呼叫方法。
二、實驗過程
1、實現本地程式服務
在圖1.1的介面上新增“計算”按鈕。在介面上輸入姓名、身高和體重資料後,點選“計算”按鈕後呼叫本地服務來計算BMI指數,然後根據計算得出的BMI指數,給出對應的提示資訊。
(1)新建一個繼承Service類的MyService,在類中過載onBind()方法,並在onBind()中返回MyService的例項:
public class MyService extends Service {
private final IBinder mBinder = new LocalBinder();
public class LocalBinder extends Binder{
MyService getService(){
return MyService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
}
(2)在MyService中新增一個計算BMI指數的方法:
public String gettizhi(double h,double w) {
String tizhi = null;
double bmi = w/((h/100)*(h/100));
if(bmi<18.5){
tizhi="體重偏瘦";
}
else if(bmi>=18.5&&bmi<24){
tizhi="體重正常";
}
else if(bmi>=24&&bmi<28){
tizhi="體重偏胖";
}
else if(bmi>=28){
tizhi="體重肥胖";
}
return tizhi;
}
(3)因為如果在計算按鈕中啟動服務需要點選兩次才能獲取返回資訊,所以直接在MainActivity的oncreate()中啟動服務,在計算按鈕中獲取返回資訊,在MainActivity中新增如下程式碼:
private MyService myservice;
String result;
Button b3 = (Button) findViewById(R.id.button3);
Intent serviceintent = new Intent(MainActivity.this,MyService.class);
bindService(serviceintent, mConnection, Context.BIND_AUTO_CREATE);
b3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
result = myservice.gettizhi(Double.valueOf(e3.getText().toString()),Double.valueOf(e2.getText().toString()));
Toast.makeText(getApplicationContext(), e1.getText().toString()+result, Toast.LENGTH_LONG).show();
}
});
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
myservice = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myservice = ((MyService.LocalBinder)service).getService();
}
};
(4)在AndroidManifest.xml中註冊MyService
(5)效果如圖3.1所示:
圖3.1 “計算”按鈕
在圖2.1的資訊顯示介面中新增一項“體質”,根據計算得出的BMI指數給出相應的體質狀況。
在onContextItemSelected()中的檢視按鈕點選事件中新增:intent.putExtra("tizhi", result);
效果如下圖3.2所示:
圖3.2 新增“體質”項
2、實現跨程式服務
建立遠端服務,利用遠端服務實現與步驟2同樣的功能。
(1) 新建專案RemoteMyService
(2) 使用IMyService.aidl定義遠端服務的介面
package edu.cczu.remotemyservice;
interface IMyService{
String gettizhi(double h,double w);
}
(3) 通過繼承Service類的MyServiceSecond類實現遠端服務
public class MyServiceSecond extends Service {
private final IMyService.Stub mBinder = new IMyService.Stub(){
@Override
public String gettizhi(double h, double w) throws RemoteException {
String tizhi = null;
double bmi = w/((h/100)*(h/100));
if(bmi<18.5){
tizhi="體重偏瘦";
}
else if(bmi>=18.5&&bmi<24){
tizhi="體重正常";
}
else if(bmi>=24&&bmi<28){
tizhi="體重偏胖";
}
else if(bmi>=28){
tizhi="體重肥胖";
}
return tizhi;
}
};
@Override
public IBinder onBind(Intent intent) {
Toast.makeText(this, "遠端繫結", Toast.LENGTH_SHORT).show();
return mBinder;
}
}
(4) 編譯,上傳到模擬器中
(5) 在edu.cczu.myandroid中引入相同的AIDL檔案
(6) 繫結和使用遠端服務
與本地服務相比需要改變的地方:
1. 使用IMyService宣告遠端服務例項:
private IMyService imyservice;
2通過IMyService.Stub的asInterface()方法實現獲取伺服器例項:
imyservice = IMyService.Stub.asInterface(service);
3.先通過setAction()方法宣告服務標識,然後呼叫bindService()繫結服務:
final Intent serviceintent = new Intent();
serviceintent.setAction("edu.cczu.remotemyservice.MyServiceSecond");
serviceintent.setPackage(getPackageName());
bindService(serviceintent,mConnection,Context.BIND_AUTO_CREATE);
效果如入3.3所示:
圖3.3 遠端服務
相關文章
- Android基礎及應用 Intent的呼叫AndroidIntent
- Android基礎及應用 介面設計Android
- NeurophStudio安裝及基礎應用
- Python基礎語法及應用Python
- Android知識點回顧之Service基礎Android
- Android基礎知識:Service(3)啟動模式Android模式
- Service Worker的應用
- Android Protobuf應用及原理Android
- Android基礎-Activity基本使用Android
- Linux基礎命令---serviceLinux
- Android 之Service使用攻略Android
- nginx的基礎應用(續)Nginx
- Android基礎與應用 資料儲存與訪問Android
- 移動測試基礎 Android 應用測試總結Android
- echarts基礎應用Echarts
- shell基礎應用
- python基礎應用Python
- Sentinel基礎應用
- Android 基礎知識課程助您輕鬆構建應用Android
- android基礎學習-android篇day16-Menu的使用Android
- android基礎學習-android篇day16-Dialog的使用Android
- Windows應用程式基礎Windows
- Linux應用——程序基礎Linux
- Ubuntu Server 基礎應用UbuntuServer
- Android Retrofit 2.5.0使用基礎詳解Android
- Android RxJava:基礎介紹與使用AndroidRxJava
- Android中整合FFmpeg及NDK基礎知識Android
- 應用程式基礎知識:activity和intent——Android開發祕籍IntentAndroid
- TS基礎應用 & Hook中的TSHook
- android基礎學習-android篇day12-android的UI基礎入門AndroidUI
- MyCat資料庫的基礎配置及使用資料庫
- 【應用服務 App Service】App Service證書匯入,使用Key Vault中的證書APP
- 應用基礎框架全面解析框架
- Linux下Nginx基礎應用LinuxNginx
- 【基礎梳理】cookie、session、sessionStorage、localStorage之間的區別及應用場景CookieSession
- Service Worker 在 PWA 中的應用
- Android中mmap原理及應用簡析Android
- 使用 ABAP 控制 Android 原生應用Android