【问题标题】:Sent SMS message is automatically written to the content provider while it shouldn't in Cyanogenmod KitKat发送的 SMS 消息会自动写入内容提供商,而在 Cyanogenmod KitKat 中不应
【发布时间】:2014-08-15 09:37:56
【问题描述】:

当我的应用程序设置为默认应用程序时,从android KitKat 发送的短信不应该被系统写入内容提供者:

注意:从 Android 4.4(API 级别 19)开始,当且仅当某个应用未被选为默认 SMS 应用时,系统才会自动将使用此方法发送的消息写入 SMS Provider(默认 SMS 应用始终负责将其发送的消息写入 SMS Provider)。有关如何充当默认 SMS 应用的信息,请参阅电话。

但是我发送的每条消息都是自动写入的,无需我的交互(我只需调用 sendTextMessage() 并处理它)

可能是 CyanogenMod 中的错误还是我遗漏了什么?

这是我的代码:

@SuppressLint("NewApi")
public static void sendMessage(String messageBody, String phoneNumber,
        Context context) {
    if (messageBody.length() > 0 && phoneNumber.length() > 0) {
        SmsManager sms = SmsManager.getDefault();
        ArrayList<String> parts = sms.divideMessage(messageBody);

        SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(context);
        if (prefs.getBoolean(SettingsActivity.KEY_SPLIT, false)) {
            for (String singlePart : parts) {
                sms.sendTextMessage(phoneNumber, null, singlePart, null,
                        null);
            }
        } else {
            sms.sendMultipartTextMessage(phoneNumber, null, parts, null,
                    null);
        }
    }

    /**
     * Add message to content provider (after KitKat)
     */
    // if (android.os.Build.VERSION.SDK_INT >=
    // android.os.Build.VERSION_CODES.KITKAT) {
    // Log.d(null, "adding sms to content provider");
    // ContentValues values = new ContentValues();
    // values.put(Telephony.Sms.ADDRESS, phoneNumber);
    // values.put(Telephony.Sms.BODY, messageBody);
    // // values.put(Telephony.Sms.READ, 0);
    // values.put(Telephony.Sms.DATE, System.currentTimeMillis());
    // // values.put(Telephony.Sms._ID,
    // // msgs[i].getIndexOnIcc());
    // context.getContentResolver().insert(Telephony.Sms.Sent.CONTENT_URI,
    // values);
    // }
}

【问题讨论】:

  • 这很可能是 CyanogenMod 的问题,但我们必须查看您的代码才能确定。
  • 如果该代码在 KitKat 上运行且写入块被注释掉时仍然自动写入,那么是的,我会说这是 CyanogenMod 的错误。
  • 但是其他应用程序怎么可能正常工作呢?他们可能还会将代码添加到提供程序中,并且在每个短信应用程序中它们都应该加倍

标签: android android-4.4-kitkat cyanogenmod


【解决方案1】:

我不知道为什么,但是当我添加已发送和已交付的待处理意图时,新短信不会自动添加到内容提供商。这解决了我的问题

PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
                new Intent(SENT), 0);

PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
                new Intent(DELIVERED), 0);

sms.sendTextMessage(phoneNo, null, singlePart, sentPI, deliveredPI);

此问题的代码:Trouble with sendMultipartText in android

【讨论】:

    【解决方案2】:

    我在两台设备上的应用中发现了相同的错误。全部带有自定义 rom(基于 CM)。 尝试使用这个库android smsmms sending library,如果问题仍然存在,则可能意味着您的清单文件有问题。

    【讨论】:

      猜你喜欢
      • 2015-02-26
      • 2016-09-16
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      相关资源
      最近更新 更多