我构建了一个自动回复短信 Android 应用程序,但我不希望自动回复(已发送短信)显示在默认消息应用程序中。我搜索了又搜索,却找不到答案。有没有办法绕过将发送的短信写入默认消息应用程序?
这是我用来获取数据并发送消息的 BroadcastReciever
public class SmsReceiver extends BroadcastReceiver {
ParseUser user = ParseUser.getCurrentUser();
// Auto reply message composed of the current reply and url from that business
String msg = user.getString("myCurrentReply") + " " + user.getString("couponUrlChosen");
List smsFromList = user.getList("smsFrom");
String userName = (String) user.get("username");
@Override
public void onReceive(final Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Object messages[] = (Object[]) bundle.get("pdus");
SmsMessage smsMessage[] = new SmsMessage[messages.length];
for (int n = 0; n < messages.length; n++) {
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
}
final String pno = smsMessage[0].getOriginatingAddress();
user.put("lastSmsFrom", pno);
user.saveInBackground();
// show first message
Toast toast = Toast.makeText(context, "Received SMS: " + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG);
toast.show();
// Check Phone Number from SMS Received against Array in User Row
ParseQuery<ParseObject> query = ParseQuery.getQuery("_User");
Log.d("Username: ", userName);
query.whereEqualTo("username", userName);
query.whereContainedIn("lastSmsFrom", smsFromList);
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> smsList, ParseException e) {
if (e == null) {
Log.d("Errors", "none");
if (smsList.size() == 0) {
// Send SMS
sendSms(pno, msg);
// Add Phone number to smsFrom in currentUsers Row
user.addUnique("smsFrom", pno);
// Save Phone Number in Array
user.saveInBackground();
Log.d("List size: ", " " + smsList.size());
}
} else {
Log.d("Error Message: ",
e.getMessage());
}
Log.d("Already sent to this number today. ", " " + smsList.size());
}
});
}
private void sendSms(String phonenumber, String message) {
SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage(phonenumber, null, message, null, null);
}
}
最佳答案
在 KitKat 之前,使用 SmsManager
发送短信需要发送消息的应用将其插入到 Provider 中,因此只需忽略这一点即可。
从 KitKat 开始,任何非默认 SMS 应用并使用 SmsManager
发送消息的应用都会由系统自动将消息写入提供程序。没有办法阻止这种情况,而且,应用程序也无法删除这些消息,因为它没有对提供程序的写入权限。*
作为默认短信应用程序的应用程序负责编写其传出消息,因此可以省略该步骤。系统不会自动写入默认短信应用。
<小时/>* 仅在 4.4 中存在一个安全漏洞,非默认应用程序可以通过该漏洞获得对 Provider 的写访问权限。详细见my answer here ,但在 KitKat 之后的版本中不起作用。
关于java - 阻止发送的短信被记录在默认消息应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25905237/