2009-11-16 28 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); 
    } 
} 

检查优先级并设置比其他接收者更高的优先级(在您的清单中)。

相关问题