JustLikeThat
JustLikeThat

Reputation: 363

Launch SMS using data from a scanned QR Code

I'm trying to start the SMS activity with the phone number from a scanned QR Code filled in. So far I've been able to get the activity to launch but the number and message fields are blank. Here's what I have, currently this is crashing the app:

else if(resultType.getParsedResultType() == ParsedResultType.SMS){
    Button smsButton = (Button)findViewById(R.id.btn_send_sms);
    smsButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v){
            String smsUri = ResultsActivity.this.item.getContent();
            Uri uri = Uri.parse(smsUri);
                            
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.addCategory(Intent.CATEGORY_DEFAULT);
            i.setType("vnd.android-dir/mms-sms");
            i.setData(uri);
            startActivity(i);
        }
    });
    smsButton.setVisibility(View.VISIBLE);
}

The String smsUri contains the scanned string from the QR Code, "SMSTO:666-666-1234:hello". How can I get the SMS Activity to launch with the phone number and the message already entered into the number and body fields?

I saw this post:

Sending SMS using Intent does not add recipients on some devices

Would I need to parse the QR Code result myself and break it into the phone number and message, then add those as Extras like that example?


Got it!


Since I can't answer my own question yet here it is:

Okay, got it to work. I made a class to break the QR result into separate elements:

public class Sms {
    public static String[] breakString(String s) {
        String[] smsElements = s.split(":");
        return smsElements;
    }
}

Then changed the method I have above to:

else if(resultType.getParsedResultType() == ParsedResultType.SMS){
    Button smsButton = (Button)findViewById(R.id.btn_send_sms);
    smsButton.setOnClickListener(new OnClickListener() {
                        
        @Override
        public void onClick(View v){
            String smsUri = ResultsActivity.this.item.getContent();
            String[] smsElements = Sms.breakString(smsUri);
                            
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.putExtra("address", smsElements[1]);
            i.putExtra("sms_body", smsElements[2]);
            i.setData(Uri.parse("smsto:" + smsElements[1]));
            startActivity(i);
        }
    });
    smsButton.setVisibility(View.VISIBLE);
}

Upvotes: 0

Views: 2137

Answers (1)

JustLikeThat
JustLikeThat

Reputation: 363

Okay, got it to work. I made a class to break the QR result into separate elements:

public class Sms {
    public static String[] breakString(String s) {
        String[] smsElements = s.split(":");
        return smsElements;
    }
}

Then changed the method I have above to:

else if(resultType.getParsedResultType() == ParsedResultType.SMS){
    Button smsButton = (Button)findViewById(R.id.btn_send_sms);
    smsButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v){
            String smsUri = ResultsActivity.this.item.getContent();
            String[] smsElements = Sms.breakString(smsUri);

            Intent i = new Intent(Intent.ACTION_VIEW);
            i.putExtra("address", smsElements[1]);
            i.putExtra("sms_body", smsElements[2]);
            i.setData(Uri.parse("smsto:" + smsElements[1]));
            startActivity(i);
        }
    });
    smsButton.setVisibility(View.VISIBLE);
}

Upvotes: 1

Related Questions