public class IPCFragment extends Fragment { @BindView(R.id.messenger_bt) Button messengerBt; Unbinder unbinder; public IPCFragment() { // Required empty public constructor } Messenger mService; Messenger mGetReplyMessenger = new Messenger(new MessengerHandler()); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_ipc, container, false); unbinder = ButterKnife.bind(this, view); messengerBt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 应用内,但不同进程 Intent intent = new Intent(getActivity(),MessengerService.class); getActivity().bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); //其他应用 // Intent intent = new Intent(); // intent.setAction("My_MessengerService_Action"); // intent.setPackage("com.example.sys.ipcdemo"); // getActivity().bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); } }); return view; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } private static class MessengerHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case MyConstants.MSG_WHAT: Log.v("ipc", msg.getData().getString("reply") + ""); break; } super.handleMessage(msg); } } ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { mService = new Messenger(iBinder); Message msg = Message.obtain(null, MyConstants.MSG_WHAT); Bundle bd = new Bundle(); //开始发送消息 bd.putString("msg", "我是serviceConnection,我发的消息"); msg.setData(bd); //设置需要回复 msg.replyTo = mGetReplyMessenger; try { mService.send(msg); } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName componentName) { } }; @Override public void onDestroy() { super.onDestroy(); getActivity().unbindService(serviceConnection); }
}
public class MessengerService extends Service { Messenger mGetReplyMessenger = new Messenger(new MessengerHandler()); @Override public IBinder onBind(Intent intent) { return mGetReplyMessenger.getBinder(); } private static class MessengerHandler extends Handler { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case MyConstants.MSG_WHAT: Log.v("ipc", msg.getData().getString("msg")); Messenger ms = msg.replyTo; Message replyMsg = Message.obtain(null, MyConstants.MSG_WHAT); //回复消息 Bundle bd = new Bundle(); bd.putString("reply", "我是MessengerService,你的消息我收到了"); replyMsg.setData(bd); try { ms.send(replyMsg); } catch (RemoteException e) { e.printStackTrace(); } } } } }AndroidManifest.xml
//同一应用
<service android:name=".ipc.MessengerService" android:process=":ipc" android:enabled="true" android:exported="true"></service>
//不同应用
<service android:name=".MessengerService" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="My_MessengerService_Action"/> </intent-filter> </service>
资源下载:https://download.csdn.net/download/sunyushen01/10516941