起動する主なアクティビティがあります: 1.- ソケットに書き込むネットワーク傾向のあるスレッド。2.- ソケットから読み取ることになっているネットワーク傾向のあるサービス。ここまでで 1. は完了ですが、ソケットから読み取った情報をメイン アクティビティに表示したいと考えています。エクストラを使用してアクティビティとサービスの間で情報を渡すことができることはわかっていますが、アクティビティに新しいデータを更新して取得するように指示するにはどうすればよいですか?
質問する
289 次
2 に答える
1
バックグラウンド通信を実現するために、メインのアクティビティで BroadcastReceiver と組み合わせてブロードキャスト インテントを使用できると思います。
これを実現できるスニペットを次に示します。
(アクティビティにコードを挿入):
class MyActivity extends Activity{
CustomEventReceiver mReceiver=new CustomEventReceiver();
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
/*YOUR ONCREATE CODE HERE*/
/*Set up filters for broadcast receiver so that your reciver
can only receive what you want it to receive*/
IntentFilter filter = new IntentFilter();
filter.addAction(CustomEventReceiver.ACTION_MSG_CUSTOM1);
filter.addCategory(Intent.CATEGORY_DEFAULT);
registerReceiver(mReceiver, filter);
}
@Override
public void onDestroy(){
super.onDestroy();
/*YOUR DESTROY CODE HERE*/
unregisterReceiver(mReceiver);
}
/*YOUR CURRENT ACTIVITY OTHER CODE HERE, WHATEVER IT IS*/
public class CustomEventReceiver extends BroadcastReceiver{
public static final String ACTION_MSG_CUSTOM1 = "yourproject.action.MSG_CUSTOM1";
@Override
public void onReceive(Context context, Intent intent){
if(intent.getAction().equals(ACTION_MSG_CUSTOM1)){
/*Fetch your extras here from the intent
and update your activity here.
Everything will be done in the UI thread*/
}
}
}
}
次に、サービスで、インテントをブロードキャストするだけです (必要な追加機能を使用して)...次のように言います。
Intent tmpIntent = new Intent();
tmpIntent.setAction(CustomEventReceiver.ACTION_MSG_CUSTOM1);
tmpIntent.setCategory(Intent.CATEGORY_DEFAULT);
/*put your extras here, with tmpIntent.putExtra(..., ...)*/
sendBroadcast(tmpIntent);
于 2012-04-28T17:11:11.230 に答える
0
1 つのオプションとして、ソケット リーダーの出力をストリーム (たとえば、アプリの内部ストレージに格納されているファイル) に書き込み、アクティビティ スレッドでそのファイルを定期的にポーリングすることができます。
于 2012-04-28T17:47:40.103 に答える