阻止从登录默认消息传递应用程序发送SMS

我有一个自动回复我建立的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 query = ParseQuery.getQuery("_User"); Log.d("Username: ", userName); query.whereEqualTo("username", userName); query.whereContainedIn("lastSmsFrom", smsFromList); query.findInBackground(new FindCallback() { public void done(List 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发送的SMS要求应用程序发送消息以将其插入提供程序,因此这只是省略的问题。

从KitKat开始,任何不是默认SMS应用程序并使用SmsManager发送消息的应用程序将由系统自动将消息写入提供程序。 没有办法阻止这种情况,此外,应用程序也无法删除这些消息,因为它不具有对提供者的写入权限。 *

作为默认SMS应用程序的应用程序负责编写其传出消息,因此可以省略该步骤。 系统不会为默认SMS应用程序自动写入。


* 4.4中存在安全漏洞,非默认应用程序可通过该漏洞获得对提供商的写入权限。 这里的答案详细说明,但在KitKat之后的版本中不起作用。