写短信/呼叫拦截器和一些问题:无法获取短信ID,无法将短信作为读取

时间:2014-10-30 10:34:25

标签: android sms block call

我正在尝试编写一个用于阻止短信/来电的应用:发件人联系,按号码,内容过滤。我正在使用接收器来处理它。

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
    }

我可以删除这个短信,但是:

  • 屏幕上仍显示弹出式显示此短信(设备上默认短信作曲家的弹出窗口)
  • 无法获取sms _id 进行删除,我必须删除“地址”+其他一些条件,以确保我的应用不会从“地址”中删除一些旧的短信。 (我必须删除当前的一个)
  • 还有一个,我打算创建一个选项,将所有被阻止的短信视为已读(不删除),但我不知道从哪里开始。 =&GT;请给出一些暗示。

更清楚的是,下面的清单:

    <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>

请帮助我为所有人提供一些提示,想法,解决方案,建议...... 非常感谢!

0 个答案:

没有答案