BroadcastReceiver自动在Android中读取短信

时间:2015-06-03 11:33:45

标签: android sms broadcastreceiver

我使用BroadcastReceiverToast中显示收到的短信内容。它工作正常。在Toast中显示内容。但它也会在对话框中显示消息。 enter image description here

并且消息也会进入读状态。任何方式来避免这种情况。 我的BroadcastReceiver

public class Receiver extends BroadcastReceiver {

    public static final String action = "android.provider.Telephony.SMS_RECEIVED";

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        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){

                    String strMessageFrom = message.getDisplayOriginatingAddress();
                    String strMessageBody = message.getDisplayMessageBody();

                    Toast.makeText(context, "From : " +strMessageFrom+"\nBody : "+strMessageBody, Toast.LENGTH_LONG).show();
                }
            }
        }
    }

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.RECEIVE_SMS"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".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>
    <receiver
        android:name="com.realtech.sms_db.Receiver"
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.BROADCAST_SMS">
        <intent-filter
            android:priority="1000">
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>
</application>

2 个答案:

答案 0 :(得分:2)

据我了解,问题是“为什么它处于阅读状态”?实施没有任何问题。传入的消息被标记为读取不是因为男女同校,这是因为设备通知设置&#34;自动预览&#34;。这就是为什么你能看到窗口。要禁用&#34;自动预览&#34;按照步骤: -

第1步:转到消息文件夹 第2步:选择菜单(3个点)。 第3步:选择&#34;设置&#34; 第4步:向下滚动到&#34;通知设置&#34; 第5步:选择&#34;通知设置&#34; 步骤6:取消选中&#34;预览消息&#34;。

附近的框

希望它对你有所帮助。

答案 1 :(得分:1)

显示AlertDialog.Builder并使用自定义布局。设置提醒类型TYPE_SYSTEM_ALERT

样品

    AlertDialog.Builder builder=new AlertDialog.Builder(this);
    builder.setView(yourCustomView);
    AlertDialog dialog=builder.create();
    dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
    dialog.show();