发送的SMS消息会自动写入内容提供商,而不应该在Cyanogenmod KitKat中

时间:2014-08-15 09:37:57

标签: android android-4.4-kitkat cyanogenmod

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

  

注意:从Android 4.4(API级别19)开始,当且仅当未选择应用程序作为默认SMS应用程序时,系统会自动将使用此方法发送的邮件写入SMS提供程序(默认SMS应用程序始终是负责将其发送的消息写入SMS提供商)。有关如何使用默认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);
    // }
}

2 个答案:

答案 0 :(得分:0)

我在两个设备上的应用中发现了同样的错误。全部使用自定义roms(基于CM)。 尝试使用此库android smsmms sending library,如果问题仍然存在,则可能表示您的清单文件存在问题。

答案 1 :(得分:0)

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

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