2013-03-17 3 views
0

Привет, ребята, я пытаюсь реализовать приложение, которое получит имя контакта и будет искать количество сообщений, полученных от этого конкретного имени контакта, и отобразит счет. Но я столкнулся с неожиданной проблемой, возникшей во время запуска моего pgm. Вот мой кодСчетчик сообщений Android

package com.mycompany.myapp; 

import android.app.*; 
import android.net.Uri; 
import android.os.*; 
import android.view.*; 
import android.widget.*; 
import android.widget.AdapterView.OnItemClickListener; 
import android.media.*; 
import android.telephony.*; 
import java.util.*; 

import android.content.*; 
import android.graphics.*; 
import android.database.*; 
import android.provider.*; 

public class MainActivity extends Activity 
{ 
    /** Called when the activity is first created. */ 
    DatePicker datepicker; 
    private static Context context; 
    Map contactMap; 
    String selection; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     setTitle("Tuxian"); 
     setContentView(R.layout.main); 
     MainActivity.context = getApplicationContext(); 

     GetPeopleList people = null; 
     final AutoCompleteTextView txt = (AutoCompleteTextView) findViewById(R.id.autocompletetxtview); 

     txt.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) { 
       selection = (String)parent.getItemAtPosition(position); 
       //TODO Do something with the selected text 
      } 
     }); 

     List list = displayContacts(context); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, list); 
     txt.setAdapter(adapter); 
     txt.setTextColor(Color.GREEN); 
     datepicker = (DatePicker) findViewById(R.id.datePicker); 
     Button button = (Button) findViewById(R.id.btn); 

     button.setOnClickListener(new View.OnClickListener() { 

       @Override public void onClick(View v) 
       { 
        Toast.makeText(getBaseContext(), "Date : " + (datepicker.getMonth() + 1) + "/" + datepicker.getDayOfMonth() + "/" + datepicker.getYear(), Toast.LENGTH_LONG).show(); 
        Toast.makeText(getBaseContext(), "Total : " + msgCnt(selection), Toast.LENGTH_SHORT).show(); 
       } 
      }); 
    } 
    private List displayContacts(Context c) { 
     ContentResolver cr = c.getContentResolver(); 
     Cursor pCur = null; 
     contactMap = new HashMap<String, String>(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
     List l = new ArrayList(); 
     if (cur.getCount() > 0) { 
      while (cur.moveToNext()) { 
       String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
       String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
        pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null); 
        while (pCur.moveToNext()) { 
         String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
         //Toast.makeText(getBaseContext(), "Name: " + name + ", Phone No: " + phoneNo, Toast.LENGTH_SHORT).show(); 
         l.add(name);      
         contactMap.put(name, phoneNo); 
        } 
       } 
      } 
     } 
     return l; 
    } 
    private int msgCnt (String phNum) { 

     Uri uri = Uri.parse("content://sms/inbox"); 

     ContentResolver contentResolver = context.getContentResolver(); 

     String where = "address="+phNum; 
     Cursor cursor = contentResolver.query(uri, new String[] { "_id", "thread_id"}, where, null, 
               null); 
     int count = cursor.getCount(); 

     return count; 
    } 
} 

И я добавил разрешение в файле манифеста следующим образом:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.mycompany.myapp" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="11" /> 
    <uses-permission android:name="android.permission.READ_SMS"/> 

    <application 

     android:label="@string/app_name" > 
     <activity 
      android:label="@string/app_name" 
      android:name=".MainActivity" > 
      <intent-filter > 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
    <uses-permission android:name="android.permission.READ_CONTACTS"/> 
</manifest> 

Пожалуйста, кто-нибудь помочь мне понять это! Заранее спасибо

+0

В чем проблема? Почтовые журналы – Mus

ответ

0

В чем проблема? Я бы рекомендовал изменения функции getMsgCount использовать что-то вдоль линий:

String str_query = "content://sms/inbox"; 
    Uri uri = Uri.parse(str_query); 
    String where = "address = ?"; 
    String columns[] = new String[] {"_id", "thread_id", "msg_count"}; 
    Cursor c = context.getContentResolver().query(uri, columns, where, new String[]{phNum}, null); 

Обратите внимание на this, потому что это действительно зависит много раз на OEM и как их контакты адресной книги устанавливается. Я верю, что вы действительно пытаетесь получить столбец msg_count.

Однако я не уверен, что адрес имеет правильную колонку для использования. Я знаю, что SMS-Inbox - это то место, где вы должны искать, если я прав.

Смежные вопросы