我已经编写了一个代码来删除收件箱中的短信&阻止来自特定号码的短信。但它不完美。 这是清单文件,我在其中设置优先级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();
}
}
}
}
}
答案 0 :(得分:0)
从Android 4.4开始,该应用程序无法在SMS上进行写入(标记为读取,删除)操作。要实现此行为,您的应用必须是默认的短信息应用。
但是,如果您的应用设计为默认短信应用, 然后,当您的应用未被选为默认应用时,这很重要 您了解应用程序的限制并禁用 适当的功能。虽然系统写入发送的SMS消息 当你的应用程序不是默认的短信应用程序时,它到SMS提供商,它确实如此 不写发送彩信,你的应用程序无法写入 用于其他操作的SMS提供程序,例如将邮件标记为草稿, 将它们标记为已读,删除它们等。 Reference
当您的应用设置为默认应用时,您必须检查Telephony.Sms.getDefaultSmsPackage()
。