我正在尝试编写一个用于阻止短信/来电的应用:发件人联系,按号码,内容过滤。我正在使用接收器来处理它。
1。关于区块功能:我在下面做了什么:
@Override
public void onReceive(Context context, Intent intent) {
// get incomingNumber, ...etc
...
// check if need to block this call, if yes: drop call then clear log
if(isNeedToBlock(incomingNumber)) {
abortBroadcast();
telephonyService.endCall();
Utils.deleteLogFromNumber(incomingNumber);
}
}
public static void deleteLogFromNumber(String number) {
String queryString="NUMBER="+number;
context.getContentResolver().delete(CallLog.Calls.CONTENT_URI,queryString,null);
}
通过这种方式,我现在可以阻止一个电话,但有两个问题:
2。关于block sms功能:如下面的代码:
public void onReceive(Context context, Intent intent) { // in SMS Receiver
this.context = context;
final Bundle extras = intent.getExtras();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
long _id = 0;
String address ="";
String messages = "";
// Get received SMS array
Object[] smsExtra = (Object[]) extras.get(SMS_EXTRA_NAME);
for (int i = 0; i < smsExtra.length; ++i) {
SmsMessage sms = SmsMessage.createFromPdu((byte[]) smsExtra[i]);
_id = sms.getIndexOnIcc(); // can't get sms id
address = sms.getOriginatingAddress();
messages += sms.getMessageBody().toString();
}
if (isNeedToBlock(address)) { // need to block
abortBroadcast();
deleteSms(address);
//markAsRead(address);
}
}
}, 2000); // delay 2s to make sure that sms was saved
}
我可以删除这个短信,但是:
更清楚的是,下面的清单:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<receiver android:name=".CallReceiver" >
<intent-filter android:priority="2147483647" >
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
<receiver android:name=".SmsReceiver" android:enabled="true">
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
请帮助我为所有人提供一些提示,想法,解决方案,建议...... 非常感谢!