0

起動する主なアクティビティがあります: 1.- ソケットに書き込むネットワーク傾向のあるスレッド。2.- ソケットから読み取ることになっているネットワーク傾向のあるサービス。ここまでで 1. は完了ですが、ソケットから読み取った情報をメイン アクティビティに表示したいと考えています。エクストラを使用してアクティビティとサービスの間で情報を渡すことができることはわかっていますが、アクティビティに新しいデータを更新して取得するように指示するにはどうすればよいですか?

4

2 に答える 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 に答える