android权限READ_SMS已授予但无效(甚至使用REQUEST_CODE_ASK_PERMISSIONS)

时间:2016-03-01 13:28:03

标签: android

我想创建一个应用程序来读取所有收件箱短信,当我点击列表中的邮件时,它会将数据发送到另一个活动,其中包含另一个转发邮件的列表。 在我开始从事其他活动之前,阅读短信工作完美无缺。 一旦我完成了整个应用程序,我在手机上运行应用程序但是当有消息时它给了我不幸停止的Android应用程序但是当我删除所有线程时它通常启动应用程序而没有消息。可能是什么错误??

这是我的主要活动,我在Manifest中添加了读取sms权限

public class main extends ListActivity {
    final private int REQUEST_CODE_ASK_PERMISSIONS = 123;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (Build.VERSION.SDK_INT >= 23) {
            if (ContextCompat.checkSelfPermission(getBaseContext(), "android.permission.READ_SMS") == PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(main.this, new String[]{"android.permission.READ_SMS"}, REQUEST_CODE_ASK_PERMISSIONS);
                return;
            }
            readAllSMS();
        } else {
            readAllSMS();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case REQUEST_CODE_ASK_PERMISSIONS:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    readAllSMS();
                } else {

                    Toast.makeText(main.this, "READING SMS Denied", Toast.LENGTH_SHORT)
                            .show();
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

    protected void readAllSMS() {
        Toast.makeText(main.this, "READING SMS Granted", Toast.LENGTH_SHORT)
                .show();
        List<SMSData> smsList = new ArrayList<>();

        Uri uri = Uri.parse("content://sms/inbox");
        Cursor c = getContentResolver().query(uri, null, null, null, null);
        startManagingCursor(c);

        if (c.moveToFirst()) {
            for (int i = 0; i < c.getCount(); i++) {
                SMSData sms = new SMSData();
                sms.setBody(c.getString(c.getColumnIndexOrThrow("body")).toString());
                sms.setNumber(c.getString(c.getColumnIndexOrThrow("address")).toString());
                smsList.add(sms);
                c.moveToNext();
            }
        }
        c.close();

        setListAdapter(new ListAdapter(this, smsList));
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        SMSData sms = (SMSData) getListAdapter().getItem(position);
        String msg = "number : " + sms.getNumber() + "\nsent : " + sms.getBody();
        sendSMS(msg);
        Toast.makeText(getApplicationContext(), sms.getBody(), Toast.LENGTH_LONG).show();
    }

    private void sendSMS(String message) {
        Intent i = new Intent(getApplicationContext(), MainActivity.class);
        i.putExtra("SMS_Message",message);
        startActivity(i);
    }
}

0 个答案:

没有答案