Android 跨程序通訊(一)
阿新 • • 發佈:2018-12-14
Android 跨程序通訊
Android 本身提供一四種方式進行實現跨程序通訊,他們也分別是Android的四大元件.分別是:Activity,Content Provider,Broadcast和Service.
Activity實現跨程序通訊
以Activity方式實現跨程序通訊,實現方式是最為簡單的.比如應用A需要應用B提供的資料,就使用Intent呼叫應用B的Activty,再使用onActivityResult方式獲取資料.
雖然說是最簡單.但在實現是還是有很多種方式的.就像App內部跳轉一樣.可以使用action,uri,及類名方式,這裡就先來一個最常簡單Class方式,其它方式與應用內部呼叫差別不大,這裡就不詳細敘述了.
-這裡是InovkeA
private void classInvoke() {
Intent intent = new Intent();
//需請求的App包名,Activty名,Activity需要寫全名
intent.setClassName("com.peng.study.appinvokeb", "com.peng.study.appinvokeb.InvokeBActivity");
startActivityForResult(intent, CLASS_INVOKE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CLASS_INVOKE && resultCode == Activity.RESULT_OK) {
LogUtil.debug(data.getStringExtra("data"));
}
}
資料接收處理與傳統方式無區別.這裡就先不寫了.
Broadcast
Broadcast,即我們常說的廣播.主要用於資料的單項傳輸,接收方再處理完資料後,無法直接將結果回送給資料的傳送方,只能再次通過廣播的方式回送資料.
廣播的實現還是比較常用的,這裡只例舉一種比實簡單的實現
廣播發送方:
private void broadcastInvoke() {
Intent intent = new Intent();
intent.putExtra("data", "this is data");
//只有和這個action一樣的廣播接收者可以收到廣播
intent.setAction("com.study.appinovkeb.data");
sendBroadcast(intent);
LogUtil.debug("send broadcast is success");
}
廣播接收方
在AndroidManifest.xml中註冊廣播接收器
<receiver android:name=".InvokeHandler">
<intent-filter>
<action android:name="com.study.appinovkeb.data"></action>
</intent-filter>
</receiver>
廣播處理
public class InvokeHandler extends BroadcastReceiver {
public InvokeHandler() {
}
@Override
public void onReceive(Context context, Intent intent) {
LogUtil.debug("on receive is run");
String data = intent.getStringExtra("data");
LogUtil.debug("data is " + data);
}
}