wuzg1020 2016-07-18 06:58 采纳率: 5.6%
浏览 1389

发送一条短信,自己的程序中截断不了系统的SMS_RECEIVED广播

我自己创建的一个程序,在程序中自定义一个广播接收器类,同时想截断这个广播:
package com.example.smstest;

import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.telephony.gsm.SmsMessage;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

private TextView sender;
private TextView content;
private IntentFilter receiveFilter;
private MessageReceiver messageReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sender=(TextView)findViewById(R.id.sender);
    content=(TextView)findViewById(R.id.content);
    receiveFilter=new IntentFilter();
    receiveFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
    receiveFilter.setPriority(100);
    messageReceiver=new MessageReceiver();
    registerReceiver(messageReceiver, receiveFilter);
}



@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    unregisterReceiver(messageReceiver);
}



class MessageReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        Bundle bundle=intent.getExtras();
        Object[] pdus=(Object[]) bundle.get("pdus");
        SmsMessage[] messages=new SmsMessage[pdus.length];
        for(int i=0;i<messages.length;i++){
            messages[i]=SmsMessage.createFromPdu((byte[])pdus[i]);

        }
        String address=messages[0].getOriginatingAddress();
        String fullMessage="";
        for(SmsMessage message : messages){
            fullMessage += message.getMessageBody();
        }
        sender.setText(address);
        content.setText(fullMessage);
        abortBroadcast();
    }








}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}
但是运行程序后,系统自带短信程序仍可以接收到,拦截失败。如图:
图片说明
配置文件:
<?xml version="1.0" encoding="utf-8"?>
package="com.example.smstest"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="14"
    android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.RECEIVE_SMS"/>

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.smstest.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

  • 写回答

2条回答 默认 最新

  • 枫_漫天 2016-07-18 07:32
    关注

    系统自带的短信已被注册为最终广播接收者,也就是说无论怎么拦截,它都能收到这个广播!

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?