Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法从设备获取已发送的sms(文本消息)_Android_Sms_Android Sms - Fatal编程技术网

Android 无法从设备获取已发送的sms(文本消息)

Android 无法从设备获取已发送的sms(文本消息),android,sms,android-sms,Android,Sms,Android Sms,我想从设备上获得所有发送的短信息(文本消息)。 我可以通过以下方式从收件箱中获取所有信息: public List<SMS> getAllInboxSMS(Context ctx) { List<SMS> inboxSMSList = new ArrayList<>(); try { Uri uriSms = Uri.parse("content://sms/inbox"); Cursor c = ctx.

我想从设备上获得所有发送的短信息(文本消息)。 我可以通过以下方式从收件箱中获取所有信息:

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;
}
公共列表getAllInboxSMS(上下文ctx){
List inboxSMSList=new ArrayList();
试一试{
Uri Uri=Uri.parse(“content://sms/inbox");
游标c=ctx.getContentResolver().query(URI,新字符串[]{“\u id”、“线程id”、“地址”、“人员”、“日期”、“正文”},“读取=0”、null、null);
如果(c!=null&&c.moveToFirst()){
做{
inboxSMSList.add(新短信(c));
}而(c.moveToNext());
}
}捕获(例外e){
Log.e(“getAllInboxSMS”,e.toString());
}
Log.i(“收件箱”,“大小:”+inboxSMSList.size());
Log.i(“收件箱”,inboxSMSList.toString());
返回收件箱列表;
}
但是如果我修改

解析content://sms/inbox");

解析content://sms/sent");

返回的列表大小为0。

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
我试图将应用程序设置为默认短信应用程序,但也无法以这种方式运行

我正在制作棒棒糖(安卓5)。


如果可以,请提供帮助。

要阅读收件箱中的所有邮件或在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;}
不要忘记在AndroidManifest.xml中定义以下权限

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

棉花糖设备支持您检查运行时权限

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;}

参考

请尝试下面我发布的代码