Как получить контактное имя только с их номером телефона? - PullRequest
2 голосов
/ 24 июля 2011

Я делаю приложение, в котором я слушаю все входящие SMS-сообщения и надежно отправляю их в базу данных на моем сервере. Я также хочу отправить отображаемые имена всех входящих SMS-сообщений, как лучше всего это сделать? Есть ли способ сделать это с входящими сообщениями, или единственный способ сделать это - создать функцию, которая будет искать мои контакты по тому же номеру, что и smsMessage [0] .getOriginatingAddress (), который я получаю из входящих SMS-сообщений , Вот моя функция, которую я нашел, и мой код для входящих сообщений:

public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();

    Object messages[] = (Object[]) bundle.get("pdus");
    SmsMessage smsMessage[] = new SmsMessage[messages.length];
    for (int n = 0; n < messages.length; n++) {
        smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
    }

    // show first message
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://www.qas.im/web/add_sms.php");

    try {
        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("from", smsMessage[0].getOriginatingAddress()));
        nameValuePairs.add(new BasicNameValuePair("msg", smsMessage[0].getMessageBody()));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        httpclient.execute(httppost);
    } catch (ClientProtocolException e) {} catch (IOException e) {}
    Toast toast = Toast.makeText(context, "Sent to Server \n\n" + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG);
    toast.show();
}

public String getContactName(final String phoneNumber) 
{  
    Uri uri;
    String[] projection;

    if (Build.VERSION.SDK_INT >= 5)
    {
        uri = Uri.parse("content://com.android.contacts/phone_lookup");
        projection = new String[] { "display_name" };
    }
    else
    { 
        uri = Uri.parse("content://contacts/phones/filter");
        projection = new String[] { "name" }; 
    } 

    uri = Uri.withAppendedPath(uri, Uri.encode(phoneNumber)); 
    Cursor cursor = this.getContentResolver().query(uri, projection, null, null, null); 

    String contactName = "";

    if (cursor.moveToFirst()) 
    { 
        contactName = cursor.getString(0);
    } 

    cursor.close();
    cursor = null;

    return contactName; 
}

Работает просто отлично, но getContactName () имеет одну ошибку:

The method getContentResolver() is undefined for the type SMSReceiver

В чем может быть проблема? Любая помощь очень ценится.

1 Ответ

0 голосов
/ 24 июля 2011

Я думаю, что проблема может заключаться в том, что BroadcastReceiver не наследуется от Context. Вам нужно использовать Контекст, который передается в onReceive (), когда вы получаете Contentresolver. Итак, в методе getContactName () вместо этого:

Cursor cursor = this.getContentResolver().query(uri, projection, null, null, null); 

вы должны использовать это:

Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null); 
...