Как получить номер телефона отправителя sms?

Получаю имя отправителя из такого кода:

 ContentResolver contentResolver = getContentResolver(); 
 Cursor smsInboxCursor = contentResolver.query(Uri.parse("content://sms/inbox"), null, null, null, null); 
 int indexBody = smsInboxCursor.getColumnIndex("body"); 
 int indexAddress = smsInboxCursor.getColumnIndex("address");
 String from = smsInboxCursor.getString(indexAddress);

Как получить номер телефона отправителя?

public class SmsActivity extends Activity implements OnItemClickListener {
String tell,tellto,struniqumdate,struniqum="";
String bodymoney="0.0";

private static SmsActivity inst;
ArrayList<String> smsMessagesList = new ArrayList<String>();
ListView smsListView;
ArrayAdapter arrayAdapter;

public static SmsActivity instance() {
    return inst;
}

@Override
public void onStart() {
    super.onStart();
    inst = this;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sms);
    smsListView = (ListView) findViewById(R.id.SMSList);
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, smsMessagesList);
    smsListView.setAdapter(arrayAdapter);
    smsListView.setOnItemClickListener(this);

    Button post1 = (Button)findViewById(R.id.post1);

    post1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //on_Click_Update();
        }
    });

    refreshSmsInbox();
}

public void refreshSmsInbox() {
    ContentResolver contentResolver = getContentResolver();
    Cursor smsInboxCursor = contentResolver.query(Uri.parse("content://sms/inbox"), null, null, null, null);
    int indexBody = smsInboxCursor.getColumnIndex("body");
    int indexAddress = smsInboxCursor.getColumnIndex("address");
    //smsMessage.getServiceCenterAddress();
    int date1 = smsInboxCursor.getColumnIndex("date");

    //int indexCentre = smsInboxCursor.getColumnIndex("servicecenter");
    if (indexBody < 0 || !smsInboxCursor.moveToFirst()) return;
    arrayAdapter.clear();
    do {


        String date =  smsInboxCursor.getString(date1);
        Long timestamp = Long.parseLong(date);
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(timestamp);
        Date finaldate = calendar.getTime();
        String smsDate = finaldate.toString();





        String fromProvider = smsInboxCursor.getString(indexAddress);
        String body = smsInboxCursor.getString(indexBody);

        String numberpayd = StringUtils.substringBetween(body, "*", ".");

        //if (fromTcell.contains("Tcell") )    { savefromtu="Tcell"+body.su  "*","." }

        String str = "SMS From Provider: " + fromProvider +
                "\n"+ "Date: "+smsDate+
              //  "SMS Service Centre: " + smsInboxCursor.getString(indexCentre) +
                "\n" + body + "\n";




        if (fromProvider.equals("Tcell")  &&   body.contains("*")        )

        {


            try {       Thread.sleep(1000);     } catch (InterruptedException e) {       e.printStackTrace();   }
            tell = fromProvider;
            tellto = numberpayd;
            //struniqum = fromTcell +" "+ numberpayd;
            struniqumdate = smsDate;
            arrayAdapter.add(str + "**********************" + struniqum);

           bodymoney = StringUtils.substringBetween(body, "*", "*");
            bodymoney = bodymoney.replaceAll("\\s","");
            bodymoney = bodymoney.replaceAll(",",".");

           // bodymoney="0.80";

            on_Click_Update();
            try {       Thread.sleep(100);     } catch (InterruptedException e) {       e.printStackTrace();   }
            on_Click_Update_Total();


        }




    } while (       smsInboxCursor.moveToNext()    );


}

public void updateList(final String smsMessage) {

    arrayAdapter.insert(smsMessage, 0);
    arrayAdapter.notifyDataSetChanged();


}

public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
    try {
        String[] smsMessages = smsMessagesList.get(pos).split("\n");
        String address = smsMessages[0];
        String smsMessage = "";
        for (int i = 1; i < smsMessages.length; ++i) {
            smsMessage += smsMessages[i];
        }

        String smsMessageStr = address + "\n";
        smsMessageStr += smsMessage;
        Toast.makeText(this, smsMessageStr, Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        e.printStackTrace();
    }
}



private void on_Click_Update() {
   // String URL = "http://test";
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    StringRequest request = new StringRequest(com.android.volley.Request.Method.POST, "http://test", new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d("onResponse", response);

            Toast.makeText(SmsActivity.this, "SENT SUCCESSFULLY!" + bodymoney, Toast.LENGTH_LONG).show();

        }

    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d("onError", error.toString());
            Toast.makeText(SmsActivity.this, "PLEASE CHECK YOUR INTERNET CONNECTION!", Toast.LENGTH_LONG).show();
        }
    }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {

            Map<String, String> params = new HashMap<String, String>();
            //params.put("id",idq.getText().toString());
            //if()
            String tellto_r="+9"+tellto.replaceAll("\\s+","");
            params.put("tell",tell);
            params.put("tellto",tellto_r);
            params.put("date",tellto_r+struniqumdate);
            params.put("status",bodymoney);


            //params.put("id","38");
            //params.put("reply", "38-------------------------");


            return params;
        }
    };
    requestQueue.add(request);

}




private void on_Click_Update_Total() {
    // String URL = "http://test.php";
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    StringRequest request = new StringRequest(com.android.volley.Request.Method.POST, "http://test.php", new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d("onResponse", response);

            Toast.makeText(SmsActivity.this, "SENT SUCCESSFULLY!" + bodymoney, Toast.LENGTH_LONG).show();

        }

    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d("onError", error.toString());
            Toast.makeText(SmsActivity.this, "PLEASE CHECK YOUR INTERNET CONNECTION!", Toast.LENGTH_LONG).show();
        }
    }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {

            Map<String, String> params = new HashMap<String, String>();
            //params.put("id",idq.getText().toString());
            //if()
            String tellto_r="+9"+tellto.replaceAll("\\s+","");
            params.put("tell",tellto_r);
          //  params.put("tellto",tellto_r);
           // params.put("date",tellto_r+struniqumdate);
           // params.put("status",bodymoney);


            //params.put("id","38");
            //params.put("reply", "38-------------------------");


            return params;
        }
    };
    requestQueue.add(request);

}

}

public class SmsBroadcastReceiver extends BroadcastReceiver {
String  origin_address;
long origin_index;
String n1,n2;
public static final String SMS_BUNDLE = "pdus";

public void onReceive(Context context, Intent intent) {
    Bundle intentExtras = intent.getExtras();
    if (intentExtras != null) {
        Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
        String smsMessageStr = "";
        for (int i = 0; i < sms.length; ++i) {
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);

            String smsBody = smsMessage.getMessageBody().toString();

             origin_address = smsMessage.getOriginatingAddress();
            origin_index = smsMessage.getTimestampMillis();


           n1 = smsMessage.getServiceCenterAddress();
            n2 = smsMessage.getEmailBody();


           // String n2 = smsMessage.getServiceCenterAddress();




            smsMessageStr += "SMS From: " + origin_address + "\n";
            smsMessageStr += "TimestampMillis: " + origin_index + "\n";
            smsMessageStr += "Sms Service Center: " + n1 + "\n";
            smsMessageStr += "Sms Class: " + n2 + "\n";
            smsMessageStr += smsBody + "\n";
        }
       // Toast.makeText(context, smsMessageStr + "OOOOOOOONNNNNNNNN RECEIVEEEEEEEEEEEEE",  Toast.LENGTH_SHORT).show();
        Toast.makeText(context,   String.valueOf(n2),  Toast.LENGTH_LONG).show();


        //this will update the UI with message
        SmsActivity inst = SmsActivity.instance();
        inst.updateList(smsMessageStr);
    }
}

}


Ответы (1 шт):

Автор решения: Maks

Вам нужно создать receiver который будет принимать смс. :

Manifest.xml

<uses-permission android:name="android.permission.RECEIVE_SMS" />
 
 ....

<receiver android:name=".listener.SmsListener">
<intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>

SmsListener.java

public class SmsListener extends BroadcastReceiver{

private SharedPreferences preferences;

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

    if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
        Bundle bundle = intent.getExtras();           
        SmsMessage[] msgs = null;
        String msg_from;
        if (bundle != null){
       
            try{
                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]);
                    msg_from = msgs[i].getOriginatingAddress();  //ЭТО НОМЕР!!!!!!!!!/////
                    String msgBody = msgs[i].getMessageBody();
                }
            }catch(Exception e){
//                            Log.d("Exception caught",e.getMessage());
            }
        }
    }
}
}
→ Ссылка