androidmodule通信,Android 兩個App間進行IPC通信

 2023-12-25 阅读 25 评论 0

摘要:文章目錄DemoADemoB 前提:必須先啟動DemoB的Service,DemoA與DemoB成功進行IPC。 androidmodule通信、運行結果 2021-09-12 13:52:51.986 2568-2568/com.jlink.demob D/wangrui: 通信管道正在綁定 2021-09-12 13:53:11.969 2568-2568/com.jlink.demob D/wangrui

文章目錄

    • DemoA
    • DemoB

前提:必須先啟動DemoB的Service,DemoA與DemoB成功進行IPC。

androidmodule通信、運行結果

2021-09-12 13:52:51.986 2568-2568/com.jlink.demob D/wangrui: 通信管道正在綁定
2021-09-12 13:53:11.969 2568-2568/com.jlink.demob D/wangrui: 接收到客戶端消息
2021-09-12 13:53:11.970 2568-2568/com.jlink.demob D/wangrui: 名字:王睿    年齡21

DemoA

MainActivity.java

public class MainActivity extends AppCompatActivity {private Button btnIPC;private Button btnSend;private Messenger messengerProxy;private Handler handler = new Handler(Looper.getMainLooper()){@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);Bundle bundle = msg.getData();bundle.setClassLoader(MyBean.class.getClassLoader());MyBean myBean = bundle.getParcelable("message");handler.postDelayed(new Runnable() {@Overridepublic void run() {Toast.makeText(MainActivity.this,myBean.getName(),Toast.LENGTH_SHORT).show();}},3000);}};private Messenger clientMessenger = new Messenger(handler);private ServiceConnection mServiceConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder binder) {messengerProxy = new Messenger(binder);Toast.makeText(MainActivity.this,"連接成功",Toast.LENGTH_SHORT).show();}@Overridepublic void onServiceDisconnected(ComponentName name) {android.util.Log.d("wangrui","斷開連接!");}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btnIPC = findViewById(R.id.btn_ipc);btnIPC.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intentService = new Intent();intentService.setAction("com.jlink.demob.MyService");intentService.setPackage("com.jlink.demob");intentService.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);MainActivity.this.bindService(intentService, mServiceConnection, BIND_AUTO_CREATE);}});btnSend = findViewById(R.id.btn_send);btnSend.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {
//                MyBean myBean = new MyBean();
//                myBean.setName("王睿對皮卡丘使用了精靈球");try {Message message = new Message();
//                    message.replyTo = clientMessenger;Bundle bundle = new Bundle();bundle.putString("name", "王睿");bundle.putString("age","21");
//                    bundle.putParcelable("message",myBean);message.setData(bundle);messengerProxy.send(message);} catch (RemoteException e) {e.printStackTrace();}}});}
}

MyService.java

/*** author : WangRui*/
public class MyService extends Service {private Handler handler = new Handler(Looper.getMainLooper());private Messenger messenger = new Messenger(handler);@Nullable@Overridepublic IBinder onBind(Intent intent) {android.util.Log.d("wangrui","通信管道正在綁定");return messenger.getBinder();}
}

h5與Android通信框架匯總。AndroidManifest.xml

        <serviceandroid:name=".MyService"android:process=":remote"><intent-filter><category android:name="android.intent.category.DEFAULT"/><action android:name="com.jlink.demoa.MyService"/></intent-filter></service>

DemoB

MainActivity.java

public class MainActivity extends AppCompatActivity {private ServiceConnection mServiceConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder binder) {}@Overridepublic void onServiceDisconnected(ComponentName name) {}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intentService = new Intent();intentService.setAction("com.jlink.demob.MyService");intentService.setPackage("com.jlink.demob");intentService.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);MainActivity.this.bindService(intentService, mServiceConnection, BIND_AUTO_CREATE);}

MyService.java

/*** author : WangRui*/
public class MyService extends Service {private Handler handler = new Handler(Looper.getMainLooper()){@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);android.util.Log.d("wangrui","接收到客戶端消息");//            客戶端→服務端Bundle bundle = msg.getData();android.util.Log.d("wangrui","名字:" + bundle.getString("name")+"\n\n"+"年齡:" + bundle.getString("age"));
//            bundle.setClassLoader(MyBean.class.getClassLoader());
//            MyBean myBean = bundle.getParcelable("message");
//            Toast.makeText(MyService.this,myBean.getName(),Toast.LENGTH_SHORT).show();//            //服務端→客戶端
//            try {
//                Messenger clientMessenger = msg.replyTo;
//                myBean = new MyBean();
//                myBean.setName("皮卡丘對王睿使用了十萬伏特");
//                bundle = new Bundle();
//                bundle.putParcelable("message",myBean);
//                Message message = new Message();
//                message.setData(bundle);
//                message.replyTo = clientMessenger;
//                clientMessenger.send(message);
//            } catch (RemoteException e) {
//                e.printStackTrace();
//            }}};private Messenger messenger = new Messenger(handler);@Nullable@Overridepublic IBinder onBind(Intent intent) {android.util.Log.d("wangrui","通信管道正在綁定");return messenger.getBinder();}
}

Android客戶端?AndroidManifest.xml

        <serviceandroid:name=".MyService"android:process=":remote"><intent-filter><category android:name="android.intent.category.DEFAULT"/><action android:name="com.jlink.demob.MyService"/></intent-filter></service>

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/194737.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息