91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • 安卓四大組件之二#2-使用AIDL技術實現動態調用其他app中的Service的方法

安卓四大組件之二#2-使用AIDL技術實現動態調用其他app中的Service的方法

發布時間:2020-07-15 02:00:26 來源:網絡 閱讀:814 作者:MEMORY_YI_1 欄目:開發技術

上次我給大家介紹了Service的基本用法,其中有提到過如何訪問自身app的Service,現在我來為大家介紹如何訪問其他app的Service


1:創建一個安卓項目app1并且新建一個service,在Service清單文件中配置訪問此服務所需要的過濾條件

清單代碼如下

<service
            android:name="com.example.aidl.MyService"
            android:enabled="true"
            android:exported="true"
             >
            <intent-filter >
                <action android:name="org.yi.Action"/>
            </intent-filter>
        </service>

2:創建一個接口IMybinder,然后隨便寫個方法,寫完后把修飾接口的public刪掉,

interface IMyBinder {
    void start();
}

然后找到接口文件所在的文件目錄,將文件后綴名改為aidl然后回到想到項目刷新,這時候gen目錄會自動生成一個IMyBind的java文件,如下圖(萬惡的水印。。。)

安卓四大組件之二#2-使用AIDL技術實現動態調用其他app中的Service的方法

3:在創建一個app2項目(用來啟動app1中Service的方法),將aidl后綴的文件拷貝到app2項目里面來(記住拷貝的aidl所放在的包名要跟原來的一樣

安卓四大組件之二#2-使用AIDL技術實現動態調用其他app中的Service的方法

4: 回到app1的service中寫一個內部類繼承IMybinder.stub,重寫start()方法里面調用Service的方法,然后在Service的onBind方法返回一個Mybinder對象

(如下圖中play()方法是在Service里面的,然后在play方法里面打個日志已便檢查是否調用成功)

class MyBinder extends IMyBinder.Stub
{
    public void start()
    {
        play();
    }
}
@Override
public IBinder onBind(Intent intent) {
    return new MyBinder();
}
public void play()
{
    Log.e("MyService", "這是app1中Service的play方法");
}

5:在app2中放入一個按鈕并在監聽事件中調用app1中服務的方法

//利用intent的隱式意圖啟動另外一個app的服務
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent service = new Intent();
        service.setAction("org.yi.Action");    
        bindService(service , conn , Context.BIND_AUTO_CREATE);
    }
});

6:conn接口對象中的onServiceConnected方法中取得IMyBnder對象并調用start方法,代碼如下

private ServiceConnection conn = new ServiceConnection() {
                                                                                                                                                                                                                                                     
    private IMyBinder mBinder;
    @Override
    public void onServiceDisconnected(ComponentName name) {
                                                                                                                                                                                                                                                         
    }
                                                                                                                                                                                                                                                     
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        //取得IMyBinder對象
        mBinder = IMyBinder.Stub.asInterface(service);
        try {
            mBinder.start();
        } catch(RemoteException e) {
            e.printStackTrace();
        }
    }
};

大功告成,先運行app1來啟動服務,然后在app2中點擊按鈕調用app1中service的方法,結果如下安卓四大組件之二#2-使用AIDL技術實現動態調用其他app中的Service的方法

這里的調用比較復雜需要在2個app中來回寫方法,我會把這次的源代碼上傳到我的上傳(名字為博客標題),有需要的可以去下載。Service基本就說到這,下次我為大家介紹安卓第三大組件BroadCastReceiver(廣播機制)


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金秀| 六枝特区| 同德县| 通山县| 定陶县| 福建省| 卢龙县| 唐海县| 鲁甸县| 铜陵市| 仁寿县| 馆陶县| 清流县| 新津县| 米脂县| 开原市| 永春县| 津市市| 自贡市| 那坡县| 增城市| 天门市| 濉溪县| 托克托县| 齐齐哈尔市| 江孜县| 綦江县| 内黄县| 平和县| 清涧县| 永春县| 宁陕县| 上虞市| 南川市| 客服| 宁乡县| 弥勒县| 罗城| 滁州市| 韶山市| 昌宁县|