在Android 4中,我们可以使用BroadcastReceiver拦截短信。这里有一个简单的例子,可以参考。
首先我们需要在AndroidManifest.xml中声明权限并添加对应的元素:
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS" />
<receiver android:name=".SmsReceiver">
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
这里我们声明了接收和读取短信的权限,然后注册了一个BroadcastReceiver。并且设置了优先级为1000,这是为了尽可能先处理短信。
然后我们需要实现SmsReceiver:
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Retrieves a map of extended data from the intent.
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
String senderNum = currentMessage.getDisplayOriginatingAddress();
String message = currentMessage.getDisplayMessageBody();
// Check if message matches your criteria
if (senderNum.equals("your number") && message.startsWith("some text")) {
// Do something
// If you want to make sure SMS is not delivered to other applications
abortBroadcast();
}
} // end for loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReceiver", "Exception: " + e);
}
}
}
在这段代码中,我们在onReceive方法中获得了短信相关信息,然后根据号码和短信内容做了一些操作。如果你想阻止短信传递给其他应用,可以调用abortBroadcast方法。
注意,这种方式在Android 4.4或之后的版本中可能会不起作用,因为Google修改了处理短信的方式。在4.4或之后的版本中,你可能需要把你的应用设为默认短信应用才能处理短信。或者你可以使用其他方式来获取短信,例如使用NotificationListenerService来读取短信通知。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/171539.html