安卓跨程序通訊之Aidl教程詳解 一

2021-09-20 05:23:15 字數 2319 閱讀 6361

1,activity

intent intent = new intent();

intent.setaction(intent.action_call);

intent.setdata(uri.parse("tel:18702531326"));

startactivity(intent);

打**的許可權uses-permission android:name="android.permission.call_phone"/

當前應用和手機本身的打**模組是兩個程序,通過設定action和傳遞資料給系統打**模組就可以將**號碼跨程序傳遞

2,broadcast receiver

這個更好理解了,廣播分標準和有序,即非同步和同步,每個訂閱了廣播的接受者的能收到資料(沒有被攔截),但這個方式是被動的,它們無法互動,對於絕大多數的業務需求來說都需要請求網路資料並計算返回

3,content prodiver

內容提供者,安卓四大元件之一,在應用a中新建乙個sharedpreferences並寫入資料設定許可權為context.mode_world_readable,這樣應用b通過a的包名和key就可以訪問這個資料,但是官方已不太建議使用這種方式,它不是程序安全的。

4,service

aidl目前來說是多程序普遍運用的技術,那麼下面看一下通過aidl怎麼實現程序通訊

程序通訊肯定有傳輸資料和接受並返還資料,先新建兩個專案,乙個為aidldemo1作為service,另乙個為aidldemo2作為client

先把service專案切換到android模式下,然後再新建aidl資料夾

新建aidl資料夾

在aidl資料夾下新建包名

新建aidl檔案

切記字尾名 .aidl

aidl原始碼如下

編寫供client專案呼叫的service

把aidl匿名實現類賦值給ibinder

把service專案中的aidl檔案拷貝到client專案,切記包名和檔名必須一致,然後再同步專案

private imyaidlinte***ce imyaidlinte***ce;

private serviceconnectionconn=newserviceconnection() {

@override

//當service繫結並連線成功後呼叫,此時的service引數是service專案返回的aidl實現

public void onserviceconnected(componentname name,ibinder service) {

imyaidlinte***ce= imyaidlinte***ce.stub.asinte***ce(service);

@override

//斷鏈時清空,節約記憶體

public void onservicedisconnected(componentname name) {

imyaidlinte***ce=null;

private void initservice() {

intent intent =new intent();

//第乙個引數是service專案中的myservice所屬包名,第二個為myservice的全路徑名稱

intent.setcomponent(newcomponentname("com.example.administrator.aidldemo1",

"com.example.administrator.aidldemo1.myservice"));

//安卓5.0以後不允許隱式啟動service

intent.setaction("aidl");

bindservice(intent,conn,context.bind_auto_create);

呼叫aidl

imyaidlinte***ce.getcount(num1,num2);

最後別忘了解綁服務

@override

protected voidondestroy() {

super.ondestroy();

unbindservice(conn);

在執行client專案時可能會報aidl方法無法找到的異常,此時只需要cliean project,然後同步一下,執行即可

安卓跨程序繫結service

今天在學習aidl通訊的時候,使用的是兩個應用,乙個充當客戶端,乙個充當服務端,在使用客戶端繫結服務端的服務的時候一直繫結不成功。原來是使用的魅藍機型的問題。上 服務端androidmanifest.xml部分 沒啥說的 客戶端 示例1 魅藍和華為都可以繫結成功 private void binds...

安卓誇程序通訊

先簡單介紹點服務 博文裡有一些服務的介紹 這裡簡單說下 1.服務是執行在主線程中 2.前台服務使用只需要在建立時也就是oncreate中寫入一下 就可以了 notification nocation new notification r.drawable.ic launcher,karin的程式 s...

安卓USB通訊之許可權管理

這篇部落格是針對之前的一篇文章android開發之usb資料通訊作的補充。主要是在開發中發現了另外兩個不得不面對的問題 usb訪問許可權處理。usb裝置插拔狀態監聽。usb訪問許可權處理 當我們安卓手機第一次安裝我們usb相關功能的apk時,正常情況下,手機會彈出個類似於 xx應用訪問usb裝置 的...