远程服务例子

来源:互联网 发布:淘宝店铺手机端装修 编辑:程序博客网 时间:2024/06/06 02:42

远程服务场景:应用需要调用其他应用服务中的方法,或调用底层服务中的方法。

aidl:

package com.example.aidl2;interface IAidlBinder {    boolean isUidExist(int uid);}

远程服务:

public class AidlService extends Service {    @Override    public IBinder onBind(Intent intent) {        return new AidlBinder();    }    public class AidlBinder extends IAidlBinder.Stub {        @Override        public boolean isUidExist(int uid) {            return isUidSaved(uid);        }            }    private boolean isUidSaved(int uid) {        boolean result = false;        String str = "1000|10012|10013|10087";        if (str.contains(String.valueOf(uid))) {            result = true;        }        return result;    }}

注册服务:

<service android:name="com.example.aidl2.AidlService">    <intent-filter >        <action android:name="com.example.aidl2.AidlService"/>    </intent-filter></service>

其他应用调用:

public class MainActivity extends Activity {    private IAidlBinder mService;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        bindAidl();        Button button = (Button) findViewById(R.id.button);        button.setOnClickListener(new OnClickListener() {                        @Override            public void onClick(View v) {                if (mService != null) {                    try {                        boolean uidExist = mService.isUidExist(10012);                        System.out.println("uid是否存在" + uidExist);                    } catch (RemoteException e) {                        e.printStackTrace();                    }                }            }        });    }    @Override    protected void onDestroy() {        super.onDestroy();        unBindAidl();    }    private void bindAidl() {        Intent service = new Intent();        service.setAction("com.example.aidl2.AidlService");        bindService(service, mConn, Context.BIND_AUTO_CREATE);    }    private void unBindAidl() {        if (mConn != null) {            unbindService(mConn);        }        mService = null;    }    ServiceConnection mConn = new ServiceConnection() {                @Override        public void onServiceDisconnected(ComponentName name) {        }                @Override        public void onServiceConnected(ComponentName name, IBinder service) {            mService = IAidlBinder.Stub.asInterface(service);        }    };}

调用者要想调用服务里面的方法,必须要保证aidl文件同远程服务里面的一样(包名也要和远程服务中aidl所在的包名相同)。

0 0
原创粉丝点击