【发布时间】: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