Android - sendPendingIntent - sendBroadcastReciever - getStringExtra имеет то же значение
Я пишу приложение, которое загружает данные JSON (идентификатор, сообщение, номер телефона) с URL и отправляет их через SMS. У меня почти все приложение завершено, но у меня есть одна проблема. Я создал отправляющие и ожидающие доставки намерения, и у меня также есть приемники вещания. Когда отправляющий широковещательный приемник выдает мне сообщение, это сообщение отправлено. Я хочу отправить запрос на URL с идентификатором отправленного сообщения. В отправке в ожидании намерения я ставлю строку Экстра ID. При отправке широковещательного сообщения, метод onRecieve (RESULT.OK) я получаю stringExtra. Для тестирования у меня на URL два сообщения, это значит два разных идентификатора. И когда я получаю stringExtra, есть два одинаковых идентификатора последнего отправленного сообщения. Я занимался исследованиями весь день, но ничего не получалось. Не могли бы вы мне помочь? Извините за английский...
Это мой класс DownloadData для загрузки, анализа и отправки данных.
if (!result.equals("")) {
JSONArray jsonArray;
try {
jsonArray = new JSONArray(result);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String id = jsonObject.getString("id");
String phone = jsonObject.getString("phone");
String message = jsonObject.getString("message");
Log.d(TAG, "onHandleIntent: ******Parsed JSON data: " + id + " " + message + " " + phone);
if (id != null && phone != null && message != null) {
// sendSMS(message, phone, this);
Intent info = new Intent(SENT);
Log.d(TAG, "onHandleIntent: ID is " + id);
info.putExtra("extra", id);
// Bundle bundle = new Bundle();
// bundle.putString("extra", id);
// info.putExtras(bundle);
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, info, 0);
// PendingIntent sentPI = PendingIntent.getBroadcast(this,0,new Intent(SENT),0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phone, null, message, sentPI, deliveredPI);
Log.d(TAG, "onHandleIntent: sendTextMessage" + phone + " " + message);
А в MainActivity onCreate есть широковещательные рассылки для отправки и доставки.
sendBroadcastReceiver = new BroadcastReceiver() {
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
String id = arg1.getExtras().getString("extra");
Toast.makeText(getBaseContext(), "SMS Sent", Toast.LENGTH_SHORT).show();
String url = "URL goes here" + id;
Log.d(TAG, "onReceive: URL is " + url + id);
// RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
// StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
// new Response.Listener<String>() {
// @Override
// public void onResponse(String response) {
//
// Log.d(TAG, "onResponse: " + response.substring(0, 42));
//
// }
// }, new Response.ErrorListener() {
// @Override
// public void onErrorResponse(VolleyError error) {
// Log.d(TAG, "onErrorResponse: That didn't work!");
// }
// });
//
// queue.add(stringRequest);
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast.makeText(getBaseContext(), "Generic failure", Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(getBaseContext(), "No service", Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Toast.makeText(getBaseContext(), "Null PDU", Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(getBaseContext(), "Radio off", Toast.LENGTH_SHORT).show();
break;
}
}
};
deliveryBroadcastReceiver = new BroadcastReceiver() {
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS Delivered", Toast.LENGTH_SHORT).show();
break;
case Activity.RESULT_CANCELED:
Toast.makeText(getBaseContext(), "SMS not delivered", Toast.LENGTH_SHORT).show();
break;
}
}
};
registerReceiver(deliveryBroadcastReceiver, new IntentFilter(DELIVERED));
registerReceiver(sendBroadcastReceiver, new IntentFilter(SENT));
Большое спасибо за помощь!:)