中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • 安卓四大組件之二#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

十堰市| 文水县| 江阴市| 洪雅县| 普兰店市| 阳高县| 福建省| 连南| 鹤庆县| 合山市| 通化县| 岐山县| 高安市| 安宁市| 黑龙江省| 琼中| 呼伦贝尔市| 浦东新区| 自贡市| 北宁市| 泗水县| 大方县| 密云县| 南京市| 舒城县| 孟津县| 茂名市| 孝昌县| 宜都市| 白山市| 元氏县| 汶川县| 青浦区| 绩溪县| 万山特区| 望城县| 吉安县| 无极县| 余庆县| 大安市| 大同市|