短信没有阻止或从Android删除

时间:2017-01-13 22:18:27

标签: java android

我已经编写了一个代码来删除收件箱中的短信&阻止来自特定号码的短信。但它不完美。 这是清单文件,我在其中设置优先级2147483647(最大int数)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.dotnet.epomoload">

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

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CALL_PHONE"/>



    <application
        android:enabled="true"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name="com.example.dotnet.epomoload.BroadCastReceiver">
            <intent-filter android:priority="2147483647">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>




    </application>

</manifest>

这是代码,在这种情况下,broadCast功能不起作用。但我得到的数据。 &安培;我没有得到代码无效的原因。

@SuppressWarnings("deprecation")
public class BroadCastReceiver extends BroadcastReceiver
{
public String blockingNumber = "BulkSMS";


private static final String LOG_TAG = "SMSApp";
/* package */
static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
public void onReceive(Context context, Intent intent){
    String strFrom = "";
    String strMsg="";



    if (intent.getAction().equals(ACTION)){
        Bundle bundle = intent.getExtras();
        if (bundle != null){
            Object[] pdus = (Object[]) bundle.get("pdus");
            SmsMessage[] messages = new SmsMessage[pdus.length];
            for (int i = 0; i < pdus.length; i++){
                messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            }
            for (SmsMessage message : messages){
                strFrom = message.getDisplayOriginatingAddress();
                strMsg = message.getDisplayMessageBody();
            }
            if (strFrom.equals(blockingNumber)){
                this.abortBroadcast();
                Toast.makeText(context.getApplicationContext(),"Sms From Shohan"+strMsg,Toast.LENGTH_LONG).show();
                //removeMessage(context,blockingNumber);
                Uri uriSMS = Uri.parse("content://sms/inbox");
                Cursor cursor = context.getContentResolver().query(uriSMS, null,
                        null, null, null);
                cursor.moveToFirst();
                if(cursor.getCount() > 0){
                    int ThreadId = cursor.getInt(1);
                    context.getContentResolver().delete(Uri.
                                    parse("content://sms/conversations/"+ThreadId), "address=?",
                            new String[]{blockingNumber});
                    Log.d("Message Thread Deleted", blockingNumber);
                }
                cursor.close();
            }
        }
    }

}


}

1 个答案:

答案 0 :(得分:0)

从Android 4.4开始,该应用程序无法在SMS上进行写入(标记为读取,删除)操作。要实现此行为,您的应用必须是默认的短信息应用。

  

但是,如果您的应用设计为默认短信应用,   然后,当您的应用未被选为默认应用时,这很重要   您了解应用程序的限制并禁用   适当的功能。虽然系统写入发送的SMS消息   当你的应用程序不是默认的短信应用程序时,它到SMS提供商,它确实如此   不写发送彩信,你的应用程序无法写入   用于其他操作的SMS提供程序,例如将邮件标记为草稿,   将它们标记为已读,删除它们等。   Reference

当您的应用设置为默认应用时,您必须检查Telephony.Sms.getDefaultSmsPackage()