2011-06-21 46 views
0

可能重复:
I am afraid: SMS send from within an app seem impossible to detect?跟踪从应用程序发送短信

针对Android应用程序发送短信是很容易的:

SmsManager sms = SmsManager.getDefault(); 
sms.sendTextMessage(phoneNumber, null, position, pi, null); 

但它似乎所有这些短信都是“隐形”,用户永远不会知道短信已发送!

- >所有短信应用程序(Go SMS,Handcent,股票应用程序等)不显示这些短信。

- >这些发送的短信似乎并没有触发一个意图。

因此,我的问题很简单:我如何跟踪所有这些短信并查找应用程序是否有恶意?

我不想等到月底来检查我的账单,那就太迟了!

+1

请注意有礼貌的方式带来更多的可见性堆栈溢出的问题是[发表赏金](http://stackoverflow.com/faq#bounty)。谢谢。 – sarnold

回答

0

没有任何其他解决方案,答案似乎是 “NO,没有解决方案。”

这是一个很大的安全问题,在我看来。

0

而不是发送这样的消息,你可以触发一个意图,将由默认的短信应用程序处理。这将导致你的文字显示。

在这个SO后看看:

send SMS Intent in Android

编辑

据我所知,有Android的时候发送短信没有意图广播。

+0

我不认为这是OP的要求。 IMO要求如何确定其他应用程序发送了多少条消息。 –

+0

编辑的答案。随时纠正我,但我不认为Android发送SMS时系统意图。 – hwrdprkns

+0

我认为你是正确的......短暂修改系统代码,我不知道有什么办法可以做到这一点 –

0

您必须制作自己的BroadcastReceiver并将您的字符串传递给PendingIntent。因此,它可能是这个样子......

private static final String SENT_SMS  = "com.your.stuff.SMS_SENT"; 
    private static final String DELIVERED_SMS = "com.your.stuff.SMS_DELIVERED"; 
    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 

系统但不告诉你什么时候该消息出去跟Activity.RESULT_OK。还有其他消息,如不正常,如SmsManager.RESULT_ERROR_GENERIC_FAILURE等等。您可以检查在您设置的广播接收器...

this.sentReceiver = new BroadcastReceiver() { 

    @Override 
public void onReceive(final Context pContext, final Intent pIntent) { 
// Get the result code 
switch (this.getResultCode()) { 
    case Activity.RESULT_OK: 
     // Do something that pertains to the SMS going out ok like adding one to your outgoing count 
     break; 
    case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
     // do something 
     break; 
    case SmsManager.RESULT_ERROR_NO_SERVICE: 
     // do something 
     break; 

    ... 

    default: 
     break; 
} 

};

http://developer.android.com/reference/android/telephony/SmsManager.html

+0

非常感谢!这是一个伟大的第一步..所以,从我的理解,我将只能在我的应用程序中检测到SMS sennd,但不能从其他应用程序中检测到? –

+0

AFAIK是正确的......我没有测试过它,但我认为所有的广播都是由系统拾取的,因此理论上可以设置一个接收器并接收任何意图。尽管通过权限来控制信息的方式。 – rf43