4-AIII–Service跨程式通訊:aidl
零、前言
[1]. aidl:Android Interface definition language(安卓介面定義語言),目的:提供程式間的通訊介面
[2]. 一個應用提供服務:稱為服務應用,一個使用服務:稱為客戶應用
[3]. 解決客戶應用如何呼叫服務應用的服務方法時,便是aidl用武之地
[4]. 服務端開啟驗證服務,客戶端輸入使用者名稱和命名及數值,驗證使用者名稱:abc,密碼:123,數值<5000
一、服務端程式碼實現:
1.com/toly1994/aiii_service/IPayAidlInterface.aidl
// IPayAidlInterface.aidl
package com.toly1994.aiii_service;
// Declare any non-default types here with import statements
interface IPayAidlInterface {
//暴露方法
boolean pay(String name, String pwd, int money);
}
2.PayService服務
public class PayService extends Service {
@Override
public IBinder onBind(Intent arg0) {
return new MyBinder();
}
public class MyBinder extends IPayAidlInterface.Stub {
@Override
public boolean pay(String name, String pwd, int money) {
return "abc".equals(name) && "123".equals(pwd) && money < 5000;
}
}
}
3.註冊:app/src/main/AndroidManifest.xml
<service android:name=".aidl.PayService"
android:enabled="true"
android:process=":push"
android:exported="true">
<intent-filter>
<action android:name="www.toly1994.com.pay"></action>
</intent-filter>
</service>
4.AidlActivity:啟動服務
public class AidlActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startService(new Intent(this, PayService.class));
}
}
二、客戶端
1. MainActivity
public class MainActivity extends AppCompatActivity {
@BindView(R.id.et_acc)
EditText mEtAcc;
@BindView(R.id.et_pass)
EditText mEtPass;
@BindView(R.id.et_num)
EditText mEtNum;
@BindView(R.id.btn_buy)
Button mBtnBuy;
private ServiceConnection mConn;
private IPayAidlInterface mService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
bindService();
}
/**
* 繫結遠端服務
*/
private void bindService() {
Intent intent = new Intent();
//坑點:5.0以後要加 服務包名,不然報錯
intent.setPackage("com.toly1994.aiii_service");
intent.setAction("www.toly1994.com.pay");
mConn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = IPayAidlInterface.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
bindService(intent, mConn, BIND_AUTO_CREATE);
}
@OnClick(R.id.btn_buy)
public void onViewClicked() {
try {
boolean isPay = mService.pay(mEtAcc.getText().toString(),
mEtPass.getText().toString(),
Integer.parseInt(mEtNum.getText().toString()));
Toast.makeText(this, isPay ? "購買成功" : "購買失敗", Toast.LENGTH_SHORT).show();
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
unbindService(mConn);
super.onDestroy();
}
}
2.com/toly1994/aiii_service/IPayAidlInterface.aidl
// IPayAidlInterface.aidl
package com.toly1994.aiii_service;
// Declare any non-default types here with import statements
interface IPayAidlInterface {
//暴露方法
boolean pay(String name, String pwd, int money);
}
附錄、客戶端佈局檔案:activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/et_acc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入賬號" />
<EditText
android:id="@+id/et_pass"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入密碼" />
<EditText
android:id="@+id/et_num"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="1"
android:hint="請輸入數額" />
<Button
android:id="@+id/btn_buy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="確定" />
</LinearLayout>
注意坑點:5.0以後用action啟動服務要加服務所在應用的包名,不然報錯
後記、
1.宣告:
[1]本文由張風捷特烈原創,轉載請註明
[2]歡迎廣大程式設計愛好者共同交流
[3]個人能力有限,如有不正之處歡迎大家批評指證,必定虛心改正
[4]你的喜歡與支援將是我最大的動力
2.連線傳送門:
更多安卓技術歡迎訪問:安卓技術棧
我的github地址:歡迎star
簡書首發,騰訊雲+社群同步更新
張風捷特烈個人網站,程式設計筆記請訪問:http://www.toly1994.com
3.聯絡我
QQ:1981462002
郵箱:1981462002@qq.com
微信:zdl1994328
4.歡迎關注我的微信公眾號,最新精彩文章,及時送達:
相關文章
- 從AIDL看Android跨程式通訊AIAndroid
- Android跨程式通訊之非AIDL(二)AndroidAI
- Android AIDL SERVICE 雙向通訊 詳解AndroidAI
- Activity和Service跨程式通訊的兩種方式
- Android程式間通訊之AIDLAndroidAI
- Android程式間通訊,AIDL工作原理AndroidAI
- Aidl程式間通訊詳細介紹AI
- Android 程式通訊機制之 AIDLAndroidAI
- Android 程式間通訊 AIDL詳解AndroidAI
- 使用AIDL實現程式間的通訊AI
- Android跨程式通訊Android
- Android探索之AIDL實現程式間通訊AndroidAI
- Webview獨立程式並通過AIDL實現資料通訊WebViewAI
- AIDL 跨程式呼叫 -- 介面層解析AI
- Android 程式間通訊 Service、MessengerAndroidMessenger
- 使用AIDL實現跨程式介面回掉AI
- 【React】元件通訊 - 跨層通訊React元件
- Binder學習(三)通過AIDL分析Binder通訊流程AI
- Android IPC程式間通訊之AIDL和Messenger的使用AndroidC程式AIMessenger
- Android中AIDL實現程式通訊(附原始碼下載)AndroidAI原始碼
- 從AIDL開始談Android程式間Binder通訊機制AIAndroid
- Android Studio 建立aidl檔案,用於程式間通訊AndroidAI
- 跨源通訊、跨域訪問跨域
- 快速入門android AIDL(開啟多程式並進行通訊)AndroidAI
- 詳解 CmProcess 跨程式通訊的實現
- 【漫畫技術】Android跨程式通訊Android
- [Android]你不知道的Android程式化(4)--程式通訊AIDL框架AndroidAI框架
- 使用AIDL實現程式間的通訊之複雜型別傳遞AI型別
- android-IPC/Binder/D-BUS(Binder/Messager/AIDL)程式間通訊(訊息機制)AndroidAI
- Android Studio Service AIDL 詳解AndroidAI
- android AIDL程式間通訊(只介紹了簡單資料型別)AndroidAI資料型別
- AIDL使用學習(二):跨程式回撥以及RemoteCallbackListAIREM
- Android中通過Messenger與Service實現程式間雙向通訊AndroidMessenger
- 四大元件之Service_AIDL元件AI
- WinCE資料通訊之Web Service篇Web
- 不同頁面通訊與跨域跨域
- 跨語言通訊方案比較
- 瀏覽器跨標籤通訊瀏覽器