Android上的Android多BroadcastReceiver不起作用

时间:2016-05-30 11:57:19

标签: android

在我的应用程序中,我有简单的服务和一些BroadcastReceiver的简单活动,在第一次调用后BroadcastReceiverBroadcastReceiver不起作用,我无法解决这个问题,

我的活动中的

resultRequestBankCard BroadcastReceiver在调用requestBankCard

后无效

我的简化活动

public class ActivityUserRequestBankCard extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

    ...

    private BroadcastReceiver requestBankCard = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent != null) {
                Bundle data = intent.getExtras();
                on_currency_list(data.getString("result"));
            }
        }
    };

    private BroadcastReceiver resultRequestBankCard = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent != null) {
                Bundle data = intent.getExtras();
                on_result_request_cardbank(data.getString("result"));
            }
        }

    };


    private void on_currency_list(String result) {
        ...
    }

    private void on_result_request_cardbank(String result) {
        ...
    }


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_request_card_bank);

        ButterKnife.bind(this);
        showProgressDialog();

        startService(
                new Intent(
                        context, WebService.class)
                        .putExtra("request_type", "requestBankCard")
        );

        currency_list.setOnItemSelectedListener(this);

    }

    private void showProgressDialog() {
        ...
    }

    @OnClick(R.id.btn_request_bank_card)
    public void onResultRequestBankCard(View view) {
        showProgressDialog();
        int user_id = SP.getInstance().getInt(SP.SharedPrefsTypes.USERID);

        startService(
                new Intent(
                        context, WebService.class)
                        .putExtra("request_type", "resultRequestBankCard")
                        .putExtra("user_id", user_id)
                        .putExtra("currency_id", selected_currency)
        );
    }

    @Override
    protected void onResume() {
        super.onResume();
        registerReceiver(requestBankCard, new IntentFilter(WebService.REQUEST_BANK_CARD));
        IntentFilter filter          = new IntentFilter(WebService.RESULT_REQUEST_BANK_CARD);
        registerReceiver(resultRequestBankCard,filter);
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (progressDialog != null)
            progressDialog.dismiss();
        try {
            unregisterReceiver(requestBankCard);
            unregisterReceiver(resultRequestBankCard);
        } catch (Exception ignore) {
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (progressDialog != null)
            progressDialog.dismiss();
        try {
            unregisterReceiver(requestBankCard);
            unregisterReceiver(resultRequestBankCard);
        } catch (Exception ignore) {
        }
    }
}

我简化的服务:

public class WebService extends Service {

    private String fetch_server_url  = "";
    private Intent send_to_broadcast = null;

    public static final String REQUEST_BANK_CARD         = "requestBankCard";
    public static final String RESULT_REQUEST_BANK_CARD  = "resultRequestBankCard";

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (intent != null) {
            Bundle data = intent.getExtras();
            if (data != null) {
                String request_type = data.getString("request_type");

                if (request_type != null && request_type.equals("requestBankCard")) {
                    requestBankCard();
                }

                if (request_type != null && request_type.equals("resultRequestBankCard")) {
                    int user_id     = data.getInt("user_id");
                    int currency_id = data.getInt("currency_id");

                    resultRequestBankCard(user_id, currency_id);
                }
            }
        }
        return START_NOT_STICKY;
    }

    private void resultRequestBankCard(int user_id, int currency_id) {
        JsonObject json = new JsonObject();

        json.addProperty("user_id", user_id + "");
        json.addProperty("currency_id", currency_id + "");

        fetch_server_url = "clientResultRequestBankCard";
        send_to_broadcast = new Intent(RESULT_REQUEST_BANK_CARD);

        Ion.with(getBaseContext())
                .load(EpayApplication.getHostAddress() + fetch_server_url)
                .setTimeout(SV.DEFAULT_TIMEOUT)
                .setJsonObjectBody(json)
                .asString()
                .setCallback(
                        new FutureCallback<String>() {
                            @Override
                            public void onCompleted(Exception e, String response) {
                                sendBroadcast(
                                                send_to_broadcast
                                                        .putExtra("result", response)
                                                , null
                                        );
                            }
                        }
                );
    }
    private void requestBankCard() {
        JsonObject json = new JsonObject();

        json.addProperty("user_id", "");

        fetch_server_url = "clientRequestBankCard";
        send_to_broadcast = new Intent(REQUEST_BANK_CARD);

        Ion.with(getBaseContext())
                .load(EpayApplication.getHostAddress() + fetch_server_url)
                .setTimeout(SV.DEFAULT_TIMEOUT)
                .setJsonObjectBody(json)
                .asString()
                .setCallback(
                        new FutureCallback<String>() {
                            @Override
                            public void onCompleted(Exception e, String response) {
                                sendBroadcast(
                                                send_to_broadcast
                                                        .putExtra("result", response)
                                                , null
                                        );
                            }
                        }
                );
    }
}

0 个答案:

没有答案