binder一



//client:  c++

	sp<IServiceManager> sm = defaultServiceManager();
	if (sm == NULL) {
		ALOGE("Unable to get default service manager!");
		return -1;
	}

	sp<IBinder> service = sm->checkService(String16(SURFACEFLINGER));
	if (service == NULL) {
        ALOGE("unable to get surfaceflinger");
		return -1;
	}

    Parcel data, reply;
    data.writeInterfaceToken(String16("android.ui.ISurfaceComposer"));

    service->transact(1013, data, &reply);
    num = reply.readInt32();
	
	//java:
	
	

//        如果ServiceManager獲取不到可通過反射獲取
        mRemote = ServiceManager.checkService("servicename");
        if (mRemote != null) {
            try {
                mRemote.linkToDeath(mDeathRecipient, 0);
            } catch (RemoteException e) {
                mRemote = null;
            }
        }
        if (mRemote == null ) {
            return null;
        }
        android.os.Parcel _data = android.os.Parcel.obtain();
        Parcel _reply = Parcel.obtain();
        try {
            _data.writeInterfaceToken("service path");
            mRemote.transact(TRANSACTION_LOAD_INFO, _data, _reply, 0);
            return _reply.readString();
        } catch (Exception e) {
            Log.d(TAG, "getTotalInfo has Exception : " + e);
        } finally {
            _data.recycle();
        }
        return "";

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章