Как передать String (номер телефона) для Quickreply? : D - PullRequest
0 голосов
/ 28 февраля 2012

У меня проблема (опять же) ... теперь я хочу передать строку из одного действия в другое.

Первым действием является SMSReceiver, я создаю ListView для номера контакта и сообщения здесь.

Это полный код:

public class SMSReceiver extends BroadcastReceiver {

private static final int NOTIF_ID = 0;

@Override
public void onReceive(Context arg0, Intent arg1) {
    // TODO Auto-generated method stub

    Bundle bundle = arg1.getExtras();
    SmsMessage[] msgs = null;
    String str = "";
    if (bundle != null) {
        Object[] pdus = (Object[]) bundle.get("pdus");
        msgs = new SmsMessage[pdus.length];

        for (int i = 0; i < msgs.length; i++) {
            msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            str += "You Get New SMS from " + msgs[i].getOriginatingAddress();
            str += " :";                    str += msgs[i].getMessageBody().toString();
            str += "\n";

        Toast.makeText(arg0, str, Toast.LENGTH_SHORT).show();

        NotificationManager nm = (NotificationManager) arg0.getSystemService(Context.NOTIFICATION_SERVICE);

        String tickerText = str;

        Notification notif = new Notification(R.drawable.ic_launcher, tickerText, System.currentTimeMillis());

        notif.flags = Notification.FLAG_AUTO_CANCEL;

        String contentTitle = msgs[i].getOriginatingAddress();
        String contentText = msgs[i].getMessageBody().toString();

        Intent intent = new Intent(arg0, SMSReply.class);
        PendingIntent pi = PendingIntent.getActivity(arg0, 0, intent, 0);

        notif.setLatestEventInfo(arg0, contentTitle, contentText, pi);
        notif.defaults = Notification.DEFAULT_ALL;
        nm.notify(NOTIF_ID, notif);

        String tempSMS = msgs[i].getOriginatingAddress();
        Intent pass = new Intent();
        Bundle bundlePass = new Bundle();

        bundlePass.putString("key", tempSMS);
        pass.putExtras(bundlePass);
        }
    }
}

И это ЧАСТЬ SMSReceiver, которую я использовал для передачи строки через Bundle и Intent

String tempSMS = msgs[i].getOriginatingAddress();
        Intent pass = new Intent();
        Bundle bundlePass = new Bundle();

        bundlePass.putString("key", tempSMS);
        pass.putExtras(bundlePass);

Теперь это полный класс SMSReply, класс, который я хочу получить номер телефона (String) из класса SMSReceiver (чтобы пользователю не приходилось вводить его снова)

public class SMSReply extends Activity implements OnClickListener {

EditText etPhone, etMessage;
Button bSend;
String phone, message;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.reply);

    etPhone = (EditText) findViewById(R.id.etPhone);
    etMessage = (EditText) findViewById(R.id.etMessage);
    bSend = (Button) findViewById(R.id.bSend);
    bSend.setOnClickListener(this);
}

public void onClick(View arg0) {
    // TODO Auto-generated method stub
    Intent get = new Intent();

    Bundle bundleGet = get.getExtras();
    phone = bundleGet.getString("answer");
    etPhone.setText(phone);

    phone = etPhone.getText().toString();
    message = etMessage.getText().toString();

    if (phone.length() > 0 && message.length() > 0) {
        sendSms(phone, message);
    } else {
        Toast.makeText(getBaseContext(),
                "Please enter both phone number and message",
                Toast.LENGTH_SHORT).show();
    }
}

private void sendSms(String phone2, String message2) {
    // TODO Auto-generated method stub
    String SENT = "SMS_SENT";
    String DELIVERED = "SMS_DELIVERED";

    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(
            SENT), 0);
    PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
            new Intent(DELIVERED), 0);

    registerReceiver(new BroadcastReceiver() {

        @Override
        public void onReceive(Context arg0, Intent arg1) {
            // TODO Auto-generated method stub
            switch (getResultCode()) {
            case Activity.RESULT_OK:
                Toast.makeText(getBaseContext(), "SMS sent",
                        Toast.LENGTH_SHORT).show();
                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;
            }
        }
    }, new IntentFilter(SENT));

    registerReceiver(new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            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();
            }
        }
    }, new IntentFilter(DELIVERED));
    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(phone, null, message, sentPI, deliveredPI);
}

А это класс PART OF SMSReply, где я поместил код для получения строки из SMSReceiver и установил эту строку в моем EditText: D

Intent get = new Intent();

    Bundle bundleGet = get.getExtras();
    phone = bundleGet.getString("answer");
    etPhone.setText(phone);

    phone = etPhone.getText().toString();
    message = etMessage.getText().toString();

Вот и все! Пожалуйста, помогите мне, и большое спасибо! : D

PS: Извините за длинный пост, и извините, если мой английский не хорош, английский не мой родной язык: D

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

В SMSReceiver

Intent intent = new Intent(arg0, SMSReply.class);
intent.putExtras("key", tempSMS);
startActivity(intent);

In SmsReply

Bundle bund=getIntent().getExtras();
String number=bund.getString("key");

Надеюсь, это поможет.

1 голос
/ 28 февраля 2012

При установке дополнительных аргументов в комплекте вы помещаете этот пакет в pass Intent и ничего не делаете для этого pass Intent. На самом деле, вы должны передать эти связки в намерение, которое вы передаете для Уведомления, то есть в намерении Намерении. intent.putExtras(bundlePass);.

Точно так же, читая аргумент из набора, вы получаете доступ к нему из нового намерения, которое не является действительным, поэтому используйте Bundle bundleGet = getIntent().getExtras();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...