BroadcastReceiver 自动读取 Android 中的短信

BroadcastReceiver automatically reads SMS in Android

我用 BroadcastReceiverToast 中显示收到的短信内容。它工作正常。显示 Toast 中的内容。但它也在对话框中显示消息之类的东西。

并且消息也进入已读状态。任何避免这种情况的方法。 我的 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>

显示 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();

据我了解,问题是 'why it is going in read state'?。执行没有任何问题。传入消息被标记为已读不是因为男女同校,而是因为设备通知设置 "auto preview"。这就是为什么您能够看到 window。要禁用 "auto preview",请按照以下步骤操作:-

第 1 步:转到消息文件夹 第 2 步:Select 菜单(3 个点)。 第 3 步:Select"Settings" 第 4 步:向下滚动到“通知设置” 第 5 步:Select“通知设置” 第 6 步:取消选中 "Preview message".

附近的复选框

希望对你有帮助。