1. 程式人生 > >Android 跨程序通訊(一)

Android 跨程序通訊(一)

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);
    }
}