首先有2個應用1個服務端(接收數據)1個客戶端(發送數據)java
服務端步驟:android
一、建立一個服務繼承Serviceapp
代碼dom
public class MyMessengerService extends Service {ide
//一、接收其餘應用發送過來的消息
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
Log.i("data", "打印的文本數據:" + msg.getData().getString("txt"));
break;
case 2:
Log.i("data", "打印的圖片數據長度:" + msg.getData().getByteArray("bitmap").length);
break;
}
};
};佈局
// 二、建立一個信使和handler關聯起來
private Messenger messenger = new Messenger(handler);this
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.i("data", "====");
return messenger.getBinder();//三、經過建立的信使對象.getBinder方法返回一個IBinder對象
}spa
}日誌
二、在配置清單註冊服務xml
代碼
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.messenger.service"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 註冊服務(隱式) -->
<service android:name=".MyMessengerService"
android:enabled="true"
android:exported="true">
<intent-filter >
<action android:name="com.examp.messenger.service.MyMessengerService"/>
</intent-filter>
</service>
</application>
</manifest>
================================================
客戶端步驟:
UI界面效果圖:
結果:
//這裏就不寫佈局代碼了
一、MainActivity.java類
代碼
public class MainActivity extends Activity {
private Messenger messenger;
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// 經過建立Messenger 把返回來的IBinder對象轉換成Messenger對象
messenger = new Messenger(service);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//按鈕的點擊事件監聽
public void onclickButton(View view) {
switch (view.getId()) {
case R.id.bt_remote_bindservice:// 綁定服務
//這裏的意圖:爲服務端註冊時在配置清單裏設置的action(至關於訪問路徑)
boolean result = bindService(new Intent(
"com.examp.messenger.service.MyMessengerService"),
connection, Context.BIND_AUTO_CREATE);
if(result){
Toast.makeText(this, "使用Messenger跨進程服務綁定成功", 100).show();
}else{
Toast.makeText(this, "使用Messenger跨進程服務綁定失敗", 100).show();
}
break;
case R.id.bt_printtxt:// 打印文本
Message message = Message.obtain();//建立一個Message對象
try {
message.what = 1;
Bundle data = new Bundle();
data.putString("txt", "客戶端要求打印的文本");
message.setData(data );
messenger.send(message);//使用信使對象發送Message
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case R.id.bt_printimg:// 打印圖片
Message message2 = Message.obtain();//建立一個Message對象
try {
message2.what = 2;
Bundle data = new Bundle();
//發送字節
data.putByteArray("bitmap", new byte[(int) (Math.random()*1024)]);
message2.setData(data );
messenger.send(message2);//使用信使對象發送Message
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
}
最後先部署好服務端(運行服務端),而後在運行客戶端 點擊按鈕 在日誌貓觀察打印結果