Android 为传入的SMS注册广播接收器

Android 为传入的SMS注册广播接收器,android,sms,block,Android,Sms,Block,如何注册BroadcastReceiver以阻止传入SMS IntentFilter intentFilter = new IntentFilter(Intent."what should be here"); ctx.registerReceiver(outgoingReceiver, intentFilter); 请尝试以下操作: intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); 希望这

如何注册BroadcastReceiver以阻止传入SMS

    IntentFilter intentFilter = new IntentFilter(Intent."what should be here");
     ctx.registerReceiver(outgoingReceiver, intentFilter);
请尝试以下操作:

intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");

希望这有帮助。

在您的清单中以最高优先级注册接收者:

    <receiver android:name=".SmsReceiver"> 
        <intent-filter android:priority="9999"> 
            <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
        </intent-filter> 
    </receiver>        
实现onReceive方法:

Bundle bundle = intent.getExtras();
if (bundle != null && bundle.containsKey("pdus")) {
    Object[] pdus = (Object[]) bundle.get("pdus");
    SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdus[0]);
    String senderNumber = sms.getOriginatingAddress();
    if( senderIsInBlackList(senderNumber)) {
        abortBroadcast();
    }
}                

在AndroidManifest.xml中声明接收方:

 <receiver
        android:name="com.example.YourSmsReceiver"
        android:exported="true" >
        <intent-filter android:priority="1000" >
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
 </receiver>


希望这有帮助,Yaron

您应该检查权限

if (ContextCompat.checkSelfPermission(mActivity, Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(mActivity, new String[]{Manifest.permission.RECEIVE_SMS}, 0);
} else {
        // register sms receiver
        IntentFilter filter = new IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
        registerReceiver(smsReceiver, filter);
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (ContextCompat.checkSelfPermission(mActivity, Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED) {

    } else {
        // register sms receiver
        IntentFilter filter = new IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
        registerReceiver(smsReceiver, filter);
}
    }

优先级不应该是0吗?根据谷歌博客0的意思是“跑完所有其他人”他/她想阻止一些传入的消息,所以这个应用程序应该有最高的可用优先级。@阿里BeZad Nead,谷歌游戏商店的谷歌管理员认为接收到的SMS许可(在你提到的教程中)是危险的。因此,包含该权限的应用程序将被拒绝。然后开发者必须向Google Play管理员提交一份表单以供批准。其他开发人员提到,这个过程非常糟糕,反馈需要数周的时间,并且在没有任何解释或一般性反馈的情况下被直接拒绝。有没有关于如何避免的想法?我希望阅读短信也是必需的,而且它的保护级别也是危险的
if (ContextCompat.checkSelfPermission(mActivity, Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(mActivity, new String[]{Manifest.permission.RECEIVE_SMS}, 0);
} else {
        // register sms receiver
        IntentFilter filter = new IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
        registerReceiver(smsReceiver, filter);
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (ContextCompat.checkSelfPermission(mActivity, Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED) {

    } else {
        // register sms receiver
        IntentFilter filter = new IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
        registerReceiver(smsReceiver, filter);
}
    }