android AIDL程式間通訊(只介紹了簡單資料型別)
先上git的地址
前言:之前在網上找過一些部落格學習AIDL,但是很多隻有介紹,但是沒有demo可供參考,或者乾脆就做在了一個APP裡面,達不到兩個APP間通訊的要求,所以就自己整理一下。
1.建立服務端的app,新建aidl檔案,點選編譯按鈕(如果不編譯會找不到定義介面生成的Stub抽象類)
2.建立一個server供客戶端呼叫,onBind(Intent intent)方法需要返回自定義的AIDL介面
public class MyService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new IBinderImp(){
@Override
public String str(String str) throws RemoteException {
Log.d("MyService",str);
return super.str(str);
}
};
}
}
public class IBinderImp extends My_Service_Int.Stub {
@Override
public String str(String str) throws RemoteException {
return str;
}
}
//注意 android:exported="true" ,不然外部無法訪問到
<service
android:name=".MyService"
android:enabled="true"
android:process=":AidlService"
android:exported="true">
<intent-filter>
<action android:name="com.example.kong.myapplication.MyServer" />
</intent-filter>
</service>
3.新建另一個module(客戶端),拷貝main目錄下的整個AIDL資料夾到此module下,老規矩,編譯,然後編寫程式碼繫結服務端的Service,需要設定其action和application的包名
class MainActivity : AppCompatActivity() {
lateinit var my_service_int: My_Service_Int
lateinit var connection: ServiceConnection
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val intents = Intent("com.example.kong.myapplication.MyServer")
intents.setPackage("com.example.kong.myapplication")
// intents.component = ComponentName("com.example.kong.myapplication", "com.example.kong.myapplication.MyServer")
connection = object : ServiceConnection {
override fun onServiceConnected(name: ComponentName, service: IBinder) {
Log.d("MainActivity", "連結上了")
//AIDL介面呼叫asInterface(Binder) 獲取到介面物件
my_service_int = My_Service_Int.Stub.asInterface(service)
}
override fun onServiceDisconnected(name: ComponentName) {
}
}
bindService(intents, connection, BIND_AUTO_CREATE)
}
override fun onDestroy() {
super.onDestroy()
unbindService(connection)
}
fun sendMessage(v: View) {
try { //呼叫介面中的方法,為其賦值
my_service_int.str("新聞聯播")
} catch (e: RemoteException) {
e.printStackTrace()
}
}
}
接下來就測試服務有沒有收到訊息,我點點點點點點點點點點點點點點點....
好的,測試通過,over
本文參考 https://blog.csdn.net/weixin_41317842/article/details/79138291
相關文章
- Aidl程式間通訊詳細介紹AI
- Android程式間通訊之AIDLAndroidAI
- Android程式間通訊,AIDL工作原理AndroidAI
- Android 程式間通訊 AIDL詳解AndroidAI
- javascript資料型別轉換簡單介紹JavaScript資料型別
- 程式間通訊簡介
- Android探索之AIDL實現程式間通訊AndroidAI
- 使用AIDL實現程式間的通訊之複雜型別傳遞AI型別
- javascript Object型別物件簡單介紹JavaScriptObject型別物件
- javascript數字和字串資料型別轉換簡單介紹JavaScript字串資料型別
- 使用AIDL實現程式間的通訊AI
- Android程式間通訊(IPC)機制Binder簡要介紹和學習計劃Android
- Android 程式通訊機制之 AIDLAndroidAI
- 從AIDL看Android跨程式通訊AIAndroid
- Android IPC程式間通訊之AIDL和Messenger的使用AndroidC程式AIMessenger
- 從AIDL開始談Android程式間Binder通訊機制AIAndroid
- Android Studio 建立aidl檔案,用於程式間通訊AndroidAI
- 【Redis】資料型別介紹Redis資料型別
- Rust 資料型別介紹Rust資料型別
- Oracle資料型別介紹Oracle資料型別
- 程式間的五種通訊方式介紹
- javascript對於值型別資料的物件包裝簡單介紹JavaScript型別物件
- Android跨程式通訊之非AIDL(二)AndroidAI
- javascript異常報錯型別簡單介紹JavaScript型別
- input:file上傳型別控制簡單介紹型別
- clickhouse資料型別簡介資料型別
- Oracle資料型別簡介Oracle資料型別
- Webview獨立程式並通過AIDL實現資料通訊WebViewAI
- JAVA_資料型別介紹與基本資料型別之間的運算規則Java資料型別
- 程式間的五種通訊方式介紹-詳解
- jQuery通過ajax返回json格式資料簡單介紹jQueryJSON
- Tuxedo資料buffer基本型別介紹UX型別
- Android 程式間通訊Android
- android-IPC/Binder/D-BUS(Binder/Messager/AIDL)程式間通訊(訊息機制)AndroidAI
- java簡單資料型別(轉)Java資料型別
- 簡單介紹HTTP與HTTPS之間的區別HTTP
- javascript資料型別和作用域介紹JavaScript資料型別
- MySQL CHAR和VARCHAR資料型別介紹MySql資料型別