红米手机未请求短信权限,因此无法读取短信。

10

以下是我的代码:

<!-- Data SMS Receiver -->
    <receiver android:name=".otp.OTPReceiver" android:enabled="true" android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.DATA_SMS_RECEIVED" />


            <data android:scheme="sms" />
            <data android:port="9027" />
        </intent-filter>
    </receiver>

otp.OTPReceiver是相关的BroadcastReceiver。除了红米设备外,这在所有其他手机上都有效。在红米手机上,您必须手动在权限应用程序中打开自启动和其他权限(此应用程序处理红米手机的权限)。我看到Facebook、whatsapp等在安装时请求权限。想知道如何实现这一点。

我看到像thisthis这样的问题,它们询问同样的事情,但两者都没有得到答案。我尝试添加android:enabled="true",android:exported="true"到接收器XML片段中,就像here中所提到的那样。但这些都不起作用。

编辑:我正在使用数据短信(也称为端口短信)。我还验证了普通短信,发现在红米手机上也存在问题。


目标 SDK 版本 24 - ranjjose
我假设你已经检查了运行时权限(如果有的话)!! - Nisarg
2
我知道这不是答案,但我想表达的是这是MI设备的问题。我遇到了同样的问题,但仍然没有弄清楚,我认为这是因为他们定制的MIUI操作系统。 - Nisarg
1
嘿,伙计,如果你发现了什么,请在这里联系我,那将是极大的帮助。 - Nisarg
并没有得到一个确切的解决方案。作为替代,我们目前正在以编程方式读取短信,无论在哪个手机上都支持。在其他情况下,我们让用户手动输入OTP(顺便说一下,这是我们的要求)。 - ranjjose
显示剩余5条评论
1个回答

2

经过长时间的尝试,通过短信提供商获得了MI短信权限。将此方法(内容提供程序方法)添加到您的活动或片段中,您将能够获得权限。

private void displaySmsLog() {
    Uri allMessages = Uri.parse("content://sms/");
    //Cursor cursor = managedQuery(allMessages, null, null, null, null);  Both are same
    Cursor cursor = this.getContentResolver().query(allMessages, null,
            null, null, null);

    while (cursor.moveToNext()) {
        for (int i = 0; i < cursor.getColumnCount(); i++) {
            Log.d(cursor.getColumnName(i) + "", cursor.getString(i) + "");
        }
        Log.d("One row finished",
                "**************************************************");
    }

}

试一下,对我有效。


谢谢,我会尽快尝试这个!! - ranjjose
嘿,请提供反馈,兄弟......它在小米4i上运行正常...这样我就可以测试并为其他小米手机采取一些预防措施。 - Tarun Sharma
@PraveenSingh,请问你能提供一下你的测试设备信息吗? - Tarun Sharma
1
@TarunSharma 我已在小米红米Note 3上进行了测试。 - Praveen Singh
这仅适用于普通短信阅读... OTP密码通常是从SMS网关发送的,MIUI将其检测为服务消息,需要手动授予读取该短信的权限。 - Prince Champappilly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接