1

我的 android 应用程序以编程方式发送 SMS(通常由推送消息触发),并在众多 Android 版本和设备上按预期工作。但是在新的 Oppo 手机型号 CPH1851 上,我看到一个通知弹出窗口说:

“[应用名称] 将向 [电话号码] 发送短信”

(其中 [app name] 是我的应用程序的名称,[phone number] 是应用程序向其发送 SMS 的号码

在此处输入图像描述

通知有一个“发送”按钮和一个“取消”按钮(后者带有递减计时器)

显然,这似乎是对 Android 安全性的又一次错误尝试,没有考虑碎片化和用户体验,只是想解决它。

谢谢您的帮助

4

2 回答 2

0

Oppo的定制版Android(称为ColorOS)是这个麻烦背后的原因。

设置/安全/权限/发送短信向您显示应用程序是否“允许”发送短信(“询问”和“禁止”是其他选项)。将此设置为“允许”可使问题在一个 Oppo 型号上消失。但不是在另一个。

所以另一个选项是启用开发人员选项,然后在列表的最底部打开“禁用权限监控”(这似乎关闭了所有的 ColorOS 权限监控,但不影响基本的 Android 权限)。

于 2019-06-01T17:52:08.207 回答
0

请尝试以下代码并添加 SEND_SMS 权限。

try {
            SmsManager smsManager = SmsManager.getDefault();

            ArrayList<String> parts = smsManager.divideMessage(sb.toString());
            //smsManager.sendTextMessage(phoneNumber, null, message, null, null);
            smsManager.sendMultipartTextMessage(phone, null, parts,
                    null, null);
            Toast.makeText(activity, "Send Message Successfully ", Toast.LENGTH_SHORT).show();

        } catch (Exception e) {
            Toast.makeText(getApplicationContext(), "SMS Failed !", Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }

下面的代码在 Oppo 手机中为我工作,试试这个

SmsManager sms = SmsManager.getDefault();
        List<String> messages = sms.divideMessage(message);
        for (String msg : messages) {

            PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_SENT"), 0);
            PendingIntent deliveredIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_DELIVERED"), 0);
            sms.sendTextMessage(phone, null, msg, sentIntent, deliveredIntent);
            Toast.makeText(activity, "Send Message Successfully", Toast.LENGTH_SHORT).show();

        }
于 2019-05-23T13:02:18.913 回答