ブロードキャストした結果を受け取る[android]
他のアプリの情報を知る際、インストールされているかなどの情報はpackage managerでアプリの
存在を確認するなどして知ることができますが、もう少し情報がほしい、プラグイン的なアプリで
プラグインの情報を取得したい際に使えるsendOrderedBroadcastについて。
SDKには「Version of sendBroadcast(Intent) that allows you to receive data back from the broadcast.」と
あるようにブロードキャストしたインテントの結果を受け取れるものだ、とあります。
Intent intentgo2= new Intent();
intentgo2.setAction("com.kayac.smartphone.****.CheckOI");
GetAddOn resultReceiver = new GetAddOn();
this.sendOrderedBroadcast(intentgo2, null, resultReceiver, null, 0,null, null);
class GetAddOn extends BroadcastReceiver {
public Bundle rst;
@Override
public void onReceive(Context context, Intent intent) {
rst = getResultExtras(false);
}
}
resultReceiverはBroadcastReceiverを継承したクラスにします。
ブロードキャストされたインテントは各アプリに送信され、結果をセットされたりスルーされたりして
最終的に本アプリに返ってきます。以下が受信してセットする部分。
それぞれのインテントを受信したブロードキャストレシーバは、結果をセットしていきます。
Bundle result = getResultExtras(false);
if(result == null) {
result = new Bundle();
}
int numResults = getResultCode();
numResults++;
setResultCode(numResults);
String[] strs=new String[2];
strs[0]="AAAAAA";
strs[1]="BBBBBB";
result.putStringArray("result" + (numResults),strs);
setResultExtras(result);
あとは通常のintentのように受け取ります
result = resultReceiver.rst;
for (i1 = 1; i1 <= result.size(); i1++) {
String[] d = result.getStringArray("result" + i1);
}

