2009-11-16 30 views
99

我正在刪除收件箱中的短信,但我想知道:如何在到達收件箱之前將其刪除?我們可以在Android中收到短信嗎?

+2

j2ee真的是一個匹配的標籤嗎? – jitter 2009-11-16 11:42:04

+1

爲什麼java不正確你不用java編程Android? – jitter 2009-11-16 11:51:05

+3

這邪惡的惡魔。你不應該這樣做。 – MattC 2009-11-17 03:14:29

回答

186

是的。

儘管對此問題有一些負面反應,但短信攔截仍有合法用途。例如:電話號碼驗證自動化,通過SMS提供的服務(儘管通常這應該通過數據SMS完成),或者用於通過處理特殊格式的消息來改善用戶體驗以便將其顯示在漂亮的Android中的應用程序特定的用戶界面。

從Android 1.6開始,傳入的SMS消息廣播(android.provider.Telephony.SMS_RECEIVED)以「ordered broadcast」—的形式發送,這意味着您可以告訴系統哪些組件應該首先接收廣播。

如果您在SMS偵聽<intent-filter>上定義了android:priority屬性,您將在本機SMS應用程序之前收到通知。

此時,您可以通過cancel進行廣播,防止它傳播到其他應用程序。


更新(2013年10月):當Android 4.4的到來,它會進行更改SMS的API可能影響應用程序的影響SMS傳送能力。
查看這個Android開發者博客文章多一些信息:
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html

+13

聖神。這是真的!我一直認爲這將是相反的方式!爲了證明,請看[這裏](https://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=telephony/java/com/android/internal/telephony/SMSDispatcher的.java; HB = HEAD#L420)。哇。希望我可以給你多一個upvote;) – Hamy 2010-08-01 16:59:32

+1

它可以在android 2.2上工作嗎? – kakopappa 2011-02-07 06:08:12

+1

@ kakopappa:是的,正如在答案中提到的那樣,它從Android 1.6+開始。 – 2011-02-07 14:46:20

9

下(「機器人:優先」和abortBroadcast())解決方案,只要可以作爲Android的消息默認應用程序(我的意思是普通的Android消息應用)。如果用戶安裝了「GoSMSPro」或「HandcentSMS」,這些應用程序仍然在收件箱中顯示消息,我相信這是由於「android:priority」引起的。如果手機上安裝了第三方消息應用程序,我不認爲有更好的方法可以解決上述問題。

+2

好點。但這應該是一個評論,而不是一個答案。可以移動它嗎? ---如果你提出一個非常高的價值呢?至於android:priority =「9999」?例如?你嘗試過嗎? – 2011-10-08 00:14:28

+4

@FelipeMicaroniLalli居然GO短信PRO等,使用2147483647他們的優先 – rf43 2011-11-03 18:16:04

+1

@DDoSAttack 2147483647是最大的? – 2011-11-04 04:48:11

0

如果你有這樣一個場景,你想刪除或忽略與此相關的聯繫號碼信息「+ 44xxxxx」等,然後使用這個代碼在短信廣播接收機

if(sender.equalsIgnoreCase("+44xxxxxx") 
    this.abortBroadCast(); 

您也可以將其設置爲高優先級。

+0

abortBroadCast();不在Kitkat運行... – Noman 2014-09-29 12:15:55

+1

abortBroadcast(); – eliasRuizHz 2015-10-22 06:06:50

11

步驟1:創建自定義廣播接收器來接收短信。寫邏輯中止broadst這樣就不會提供給您的收件箱

public class SMSReceiver extends BroadcastReceiver 
{ 
    public void onReceive(Context context, Intent intent) 
    { 
    if(conditionMatches){ 
    abortBroadcast(); 
    } 
    } 
} 

步驟2註冊廣播接收器在AndoridManifest消息,並把機器人:優先級值大量

<receiver android:name=".SMSReceiver" > 
      <intent-filter android:priority="1000"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 

那它

如何上面的代碼工作

由於接收廣播的短信是有序廣播,高優先級的接收機將首先收到,以便您的應用首先收到,並在收到您之後中止廣播。所以沒有其他應用程序可以接收它。因此短信將不存在於收件箱

+0

我們可以有一個廣播接收器,當用戶按下消息收件箱,以便我可以開發一個鎖屏。 – 2014-02-15 08:12:19

1
/** 
* Check priority 
* @param activity 
*/ 
public static void receiverPriority(Activity activity){ 

    Intent smsRecvIntent = new Intent("android.provider.Telephony.SMS_RECEIVED"); 
    List<ResolveInfo> infos = activity.getPackageManager().queryBroadcastReceivers(smsRecvIntent, 0); 
    for (ResolveInfo info : infos) { 
     System.out.println("Receiver: " + info.activityInfo.name + ", priority=" + info.priority); 
    } 
} 

檢查優先級並設置比其他接收者更高的優先級(在您的清單中)。

相關問題