当我的应用程序设置为默认应用程序时,从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);
// }
}
答案 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);