2016-07-28 3 views
-1

Я бы хотел (-а) получить все посл. sms (текстовые сообщения) с устройства. я могу получить все из них из почтового ящика с:Не удается получить отправленные sms (текстовые сообщения) с устройства

public List<SMS> getAllInboxSMS(Context ctx) { 

    List<SMS> inboxSMSList = new ArrayList<>(); 

    try { 

     Uri uriSms = Uri.parse("content://sms/inbox"); 
     Cursor c = ctx.getContentResolver().query(uriSms, new String[]{"_id", "thread_id", "address", "person", "date", "body"}, "read=0", null, null); 

     if (c != null && c.moveToFirst()) { 
      do { 
       inboxSMSList.add(new SMS(c)); 
      } while (c.moveToNext()); 
     } 

    } catch (Exception e) { 
     Log.e("getAllInboxSMS", e.toString()); 
    } 

    Log.i("inbox", "size: " + inboxSMSList.size()); 
    Log.i("inbox", inboxSMSList.toString()); 

    return inboxSMSList; 
} 

Однако если я изменить

Uri.parse ("содержание: // смс/почтовый ящик");

в

Uri.parse ("Содержание: // смс/отправляемые");

Возвращенный список размер 0.

Я попытался установить приложение как смс по умолчанию приложение, но он не работает в этом пути либо.

Я работаю на Lollipop (Android 5).

Пожалуйста, помогите, если сможете.

+0

попытки ниже кода, который я разместил –

ответ

2

Чтобы прочитать все сообщения для почтовых ящиков или отправить программно в Android, используйте следующую функцию.

public List<Sms> getAllSms(String folderName) { 
List<Sms> lstSms = new ArrayList<Sms>(); 
Sms objSms = new Sms(); 
Uri message = Uri.parse("content://sms/"+folderName); 
ContentResolver cr = mActivity.getContentResolver(); 

Cursor c = cr.query(message, null, null, null, null); 
mActivity.startManagingCursor(c); 
int totalSMS = c.getCount(); 

if (c.moveToFirst()) { 
    for (int i = 0; i < totalSMS; i++) { 

     objSms = new Sms(); 
     objSms.setId(c.getString(c.getColumnIndexOrThrow("_id"))); 
     objSms.setAddress(c.getString(c 
       .getColumnIndexOrThrow("address"))); 
     objSms.setMsg(c.getString(c.getColumnIndexOrThrow("body"))); 
     objSms.setReadState(c.getString(c.getColumnIndex("read"))); 
     objSms.setTime(c.getString(c.getColumnIndexOrThrow("date"))); 

     lstSms.add(objSms); 
     c.moveToNext(); 
    } 
} 
// else { 
// throw new RuntimeException("You have no SMS in " + folderName); 
// } 
c.close(); 

return lstSms;} 

Вызов выше функции, чтобы получить все сообщения от почтового ящика или отправить папку.

getAllSms("inbox"); // Get all sms from inbox 


getAllSms("sent"); // Get all sms from sent 

Чтобы получить все смс от почтового ящика или отправленное использование папки следующие функции

public List<Sms> getAllSms() { 
List<Sms> lstSms = new ArrayList<Sms>(); 
Sms objSms = new Sms(); 
Uri message = Uri.parse("content://sms/"); 
ContentResolver cr = mActivity.getContentResolver(); 

Cursor c = cr.query(message, null, null, null, null); 
mActivity.startManagingCursor(c); 
int totalSMS = c.getCount(); 

if (c.moveToFirst()) { 
    for (int i = 0; i < totalSMS; i++) { 

     objSms = new Sms(); 
     objSms.setId(c.getString(c.getColumnIndexOrThrow("_id"))); 
     objSms.setAddress(c.getString(c 
       .getColumnIndexOrThrow("address"))); 
     objSms.setMsg(c.getString(c.getColumnIndexOrThrow("body"))); 
     objSms.setReadState(c.getString(c.getColumnIndex("read"))); 
     objSms.setTime(c.getString(c.getColumnIndexOrThrow("date"))); 
     if (c.getString(c.getColumnIndexOrThrow("type")).contains("1")) { 
      objSms.setFolderName("inbox"); 
     } else { 
      objSms.setFolderName("sent"); 
     } 

     lstSms.add(objSms); 
     c.moveToNext(); 
    } 
} 
// else { 
// throw new RuntimeException("You have no SMS"); 
// } 
c.close(); 

return lstSms;} 

Sms класс ниже:

public class Sms{ 
private String _id; 
private String _address; 
private String _msg; 
private String _readState; //"0" for have not read sms and "1" for have read sms 
private String _time; 
private String _folderName; 


public String getId(){ 
return _id; 
} 
public String getAddress(){ 
return _address; 
} 
public String getMsg(){ 
return _msg; 
} 
public String getReadState(){ 
return _readState; 
} 
public String getTime(){ 
return _time; 
} 
public String getFolderName(){ 
return _folderName; 
} 
public void setId(String id){ 
_id = id; 
} 
public void setAddress(String address){ 
_address = address; 
} 


public void setMsg(String msg){ 
_msg = msg; 
} 

public void setReadState(String readState){ 
_readState = readState; 
} 

public void setTime(String time){ 
_time = time; 
} 
public void setFolderName(String folderName){ 
_folderName = folderName; 
} 

} 

Не забудьте определить Следующее разрешение в вашем AndroidManifest.xml

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

для поддержки зефира устройства проверить разрешение выполнения

для справки runtime permission

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