ブロードキャストした結果を受け取る[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); }