色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

詳解Android跨進程通信之AIDL

瀏覽:13日期:2022-09-19 17:10:44

需求描述

進程A調起第三方進程B進行第三方登錄 ? 實現雙向通信

代碼(進程A)1.目錄結構

詳解Android跨進程通信之AIDL

2.LoginActivity.java

public class LoginActivity extends AppCompatActivity { private ILoginInterface iLogin; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initService(); } private void initService() {// 綁定進程B中的服務Intent intent = new Intent();intent.setAction('ACTION_B');intent.setPackage('com.example.processs');bindService(intent, conn, BIND_AUTO_CREATE); } private ServiceConnection conn = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) { // 獲取到進程B中的binder對象 iLogin = ILoginInterface.Stub.asInterface(service);}@Overridepublic void onServiceDisconnected(ComponentName name) {} }; /** * 去登錄 * * @param view */ public void goLogin(View view) {try { if (iLogin != null) {iLogin.login(); } else {Toast.makeText(this, '未安裝第三方應用啊~', Toast.LENGTH_SHORT).show(); }} catch (RemoteException e) { e.printStackTrace();} } @Override protected void onDestroy() {super.onDestroy();if (iLogin != null) { unbindService(conn);} }}

對應界面

詳解Android跨進程通信之AIDL

3. ILoginInterface.aidl

// ILoginInterface.aidlpackage com.example.process;// Declare any non-default types here with import statementsinterface ILoginInterface { void login(); void loginCallback(int loginStatus, String loginUser);}4.LoginService.java 用于進程B登錄回調的Service

public class LoginService extends Service { @Nullable @Override public IBinder onBind(Intent intent) {// 該Binder對象返回給進程B來回調return new ILoginInterface.Stub() { @Override public void login() throws RemoteException { } @Override public void loginCallback(int loginStatus, String loginUser) throws RemoteException {Log.d('lichaojun123>>>', 'loginCallback: ' + loginStatus + ' : ' + loginUser); }}; }}5.AndroidManifest.xml

<?xml version='1.0' encoding='utf-8'?><manifest xmlns:android='http://schemas.android.com/apk/res/android' xmlns:tools='http://schemas.android.com/tools' package='com.example.processc'> <applicationandroid:allowBackup='true'android:icon='@mipmap/ic_launcher'android:label='@string/app_name'android:roundIcon='@mipmap/ic_launcher_round'android:supportsRtl='true'android:theme='@style/AppTheme'><activity android:name='com.example.process.LoginActivity'> <intent-filter><action android:name='android.intent.action.MAIN' /><category android:name='android.intent.category.LAUNCHER' /> </intent-filter></activity><service android:name='com.example.process.LoginService' android:enabled='true' // 是否可以被系統實例化 android:exported='true' // 是否可以被其他進程隱式調用 android:process=':remote_a'> <intent-filter><action android:name='ACTION_A'/> </intent-filter></service> </application></manifest>代碼(進程B)1.目錄結構

詳解Android跨進程通信之AIDL

2.LoginActivity.java

public class LoginActivity extends AppCompatActivity { private EditText etName; private EditText etPwd; private ILoginInterface iLogin; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);etName = findViewById(R.id.et_name);etPwd = findViewById(R.id.et_pwd);initService(); } private void initService() {// 綁定進程A中的服務Intent intent = new Intent();intent.setAction('ACTION_A');intent.setPackage('com.example.processc');bindService(intent, conn, BIND_AUTO_CREATE); } private ServiceConnection conn = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) { iLogin = ILoginInterface.Stub.asInterface(service);}@Overridepublic void onServiceDisconnected(ComponentName name) {} }; // 去登錄 public void go_login(View view) {if (etName.getText().toString().trim().equals('lcj')&& etPwd.getText().toString().trim().equals('123')) { try {if (iLogin != null) { // 登錄成功后,通知客戶端進程 iLogin.loginCallback(1, '登錄成功'); finish();} } catch (RemoteException e) {e.printStackTrace(); }} else { Toast.makeText(this, '登錄失敗', Toast.LENGTH_SHORT).show();} } @Override protected void onDestroy() {super.onDestroy();if (iLogin != null) { unbindService(conn);} }}

對應界面

詳解Android跨進程通信之AIDL

3. ILoginInterface.aidl (與進程A相同)4. LoginService.java 用于進程A調用的Service

public class LoginService extends Service { @Nullable @Override public IBinder onBind(Intent intent) {return new ILoginInterface.Stub() { @Override public void login() throws RemoteException {execLogin(); } @Override public void loginCallback(int loginStatus, String loginUser) throws RemoteException { }}; } private void execLogin() {// 調起登錄頁面Intent intent = new Intent(this, LoginActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent); }}5.AndroidManifest.xml

<applicationandroid:allowBackup='true'android:icon='@mipmap/ic_launcher'android:label='@string/app_name'android:roundIcon='@mipmap/ic_launcher_round'android:supportsRtl='true'android:theme='@style/AppTheme'><activity android:name='.LoginActivity'> <intent-filter><action android:name='android.intent.action.MAIN' /><category android:name='android.intent.category.LAUNCHER' /> </intent-filter></activity><service android:name='.LoginService' android:enabled='true' android:exported='true' android:process=':remote_b'> <intent-filter><action android:name='ACTION_B'/> </intent-filter></service> </application>

以上就是詳解Android跨進程通信之AIDL的詳細內容,更多關于Android跨進程通信AIDL的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 国产欧美一区二区三区在线看 | 深夜国产成人福利在线观看女同 | 毛片a级三毛片免费播放 | 黄色三级网站免费 | 亚洲一区在线视频观看 | 香港全黄一级毛片在线播放 | 亚洲国产福利精品一区二区 | 国产杨幂福利在线视频观看 | 成人免费真人毛片视频 | 国产成版人视频网站免费下 | 日本不卡免费高清一级视频 | 成人免费看www网址入口 | 成人禁在线观看午夜亚洲 | 欧美一区二区日韩一区二区 | 国产成人无精品久久久 | 一区二区三区网站在线免费线观看 | 亚洲综合色视频在线观看 | 欧美xxxx色视频在线观看 | japanese日本舒服丰满 | 可以免费看黄的网址 | 午夜影院啪啪 | 亚洲欧美在线综合一区二区三区 | 国产九九视频在线观看 | 亚洲精品区一区二区三区四 | 一级做a爰片久久毛片看看 一级做a爰片久久毛片鸭王 | 国产高清免费观看 | 久国产精品视频 | 成年女人毛片免费视频 | 亚洲精品国产美女在线观看 | 欧美 日韩 国产 成人 在线观看 | 免费一级毛片视频 | 久久91| 在线看免费观看韩国特黄一级 | 国产一区二区精品久 | 国产一级特黄全黄毛片 | 国产欧美日韩精品一区二区三区 | 91成人午夜性a一级毛片 | 国产日韩欧美综合一区二区三区 | 精品无人区一区二区三区a 精品午夜国产在线观看不卡 | 欧美日一级片 | 中国性孕妇孕交在线 |