2015-03-08 67 views
1

我添加了手機驗證短信功能到我的應用程序的註冊過程,但短信寫入發送和收到的短信收件箱。目前我只發送一個簡單的文本來驗證號碼,因此在這裏沒有任何祕密,但它不那麼用戶友好,所以我想知道如果我能以某種方式阻止寫這個短信。安卓 - 刪除手機驗證短信發送到自己

我加了abortBroadcast();如果代碼是正確的,但沒有效果。我使用的是Android 4.4.2,爲了安全起見,我已經閱讀過,沒有辦法做到這一點,那麼有沒有辦法以不同的方式實現我想要的?我知道其他應用程序也能做到這樣...

的代碼發送短信:

SmsManager smsManager = SmsManager.getDefault(); 
smsManager.sendTextMessage(Utils.phone, null, "text", null, null); 

用於消費THR短信代碼:

public class SMSReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle bundle = intent.getExtras(); 
     Object[] pdus = (Object[]) bundle.get("pdus"); 
     SmsMessage messages = SmsMessage.createFromPdu((byte[]) pdus[0]); 
     if (messages.getMessageBody().contains("text")) { 
      Toast.makeText(Utils.context,"ok",Toast.LENGTH_LONG).show(); 
      abortBroadcast(); 
     } 
    } 
} 

這是明顯的:

<receiver android:name="com.tomerapp.tomerapp.utils.SMSReceiver" android:exported="false"> 
    <intent-filter android:priority="999"> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
    </intent-filter> 
</receiver> 

是否android:exported =「false」意味着接收器/我的應用程序只會捕獲從應用程序本身發送的短信?我不想爲應用程序發送的短信浪費電池。

+0

從Android 4.4開始,只有默認的SMS應用程序對提供程序具有標準寫入權限,非默認應用程序通常無法控制正在寫入或刪除的消息。如果你的應用只是發送一條驗證消息,我不會擔心試圖刪除它。這可能比它的價值更麻煩。 – 2015-03-08 20:11:46

+0

WhatsApp以同樣的方式證實,短信沒有出現在列表中 – Amos 2015-03-08 20:27:20

+0

我不確定WhatsApp是如何做到的,但是您可以讓應用發送自己的數據消息,並且不會在原生應用中顯示。此外,如果在驗證時選擇WhatsApp作爲默認SMS應用程序,它可以選擇不將消息寫入提供商,因此它不會顯示在「列表」中。 – 2015-03-08 20:36:17

回答

1

從Android 4.4(KitKat)開始,只有選定爲默認SMS應用程序的應用程序才具有對提供程序的標準寫入訪問權限。如果您的應用程序是默認應用程序,則它負責編寫所有傳入消息和它自己的傳出消息,並且可以選擇不這樣做。

另一種可能性是使用數據消息,因爲這些消息不由提供商處理,因此不會顯示在其他SMS應用程序中。 This post演示瞭如何發送數據消息,以及如何配置BroadcastReceiver來查找它們。

+0

非常感謝!它有幫助 – Amos 2015-03-09 08:33:58