如何从Android上的应用程序中删除电话收件箱



我遇到了错误:

Permission Denial:writing`com.android.provider.telephony.smsprovider uri content://sms/472 from pid=11211, uid=10142 requires
android.permission.write_sms, or granturipermission()

请帮助我解决这个问题。

我的代码是:

public void deleteSMS()
{
    Uri inboxUri = Uri.parse("content://sms/inbox");
    int count = 0;
    Cursor c = getContentResolver().query(inboxUri , null, null, null, null);
    while (c.moveToNext()) {
        try {
            // Delete the SMS
            String pid = c.getString(0); // Get id;
            String uri = "content://sms/" + pid;
            count =getContentResolver().delete(Uri.parse(uri),
                    null, null);
            Toast.makeText(getApplicationContext(),"message deleted successfully..!"+count, 5000).show();
        } catch (Exception e) {
            Toast.makeText(getApplicationContext(), e.toString(), 5000).show();
        }
    }}
Added Permission in manifest file:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE"/>
<receiver android:name=".receiver.SMSReceiver" android:enabled="true">
    <intent-filter android:priority="1000">
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

我添加了所有权限,但是我仍然没有得到答案,并且显示同样的错误...

您说的是在4.2.2上运行代码,而无需请求许可。但是要删除SMS,必须在AndroidManifest.xml中添加这些权限:

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

您错过了READ_SMS许可,在删除操作之前,您必须执行需要它的操作。

您是否允许在清单中阅读短信?如果您在Android 6.0及以上进行测试,则必须在运行时提供许可。

读取联系人的示例:

if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS) !=
    PackageManager.PERMISSION_GRANTED) {
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
        Manifest.permission.READ_CONTACTS)) {

    }
    else {
        ActivityCompat.requestPermissions(
            thisActivity,
            new String[]{Manifest.permission.READ_CONTACTS},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
    }
}

在Android 6.0(棉花糖)及以上您必须在运行时获得许可。

 requestPermissions(new String[]{Manifest.permission.READ_SMS}, 1).

检查您是否已获得许可。

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case 1:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.checkSelfPermission(
                      getActivity(), Manifest.permission.READ_SMS) ==
                    PackageManager.PERMISSION_GRANTED)
                {

最新更新