我想知道拦截一个特定的关键字传入短信;例如“Hi”,使得我可以阅读其中包含“Hi”的SMS,并且在阅读消息之后删除它,并且如果该消息不包含任何这样的文本,则它不会被删除,而是保存在收件箱中。
wnavrhmk1#
寻找广播接收器,这取决于手机上安装的应用程序,但你可以给予你的应用程序优先收听消息。虽然,当一个通知显示,消息将不会在短信数据库中,所以你需要使用abortBroadcast()停止其他应用程序被通知。见下面的例子:
public class MessageReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Bundle pudsBundle = intent.getExtras(); Object[] pdus = (Object[]) pudsBundle.get("pdus"); SmsMessage messages =SmsMessage.createFromPdu((byte[]) pdus[0]); Log.i(TAG, messages.getMessageBody()); if(messages.getMessageBody().contains("Hi")) { abortBroadcast(); } }
您需要在清单中声明接收方,如下所示:
<receiver android:name="com.encima.smsreceiver.MessageReceiver" android:exported="true"> <intent-filter android:priority="999"> <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> </intent-filter> </receiver>
最后,确保您在清单中具有RECEIVE_SMS的权限。
p8h8hvxi2#
自Android 4.4版本起,如果您的应用不是默认消息应用,您将无法执行已接受答案中承诺的操作。您既无法阻止默认消息应用接收通知,也无法删除短信。
2条答案
按热度按时间wnavrhmk1#
寻找广播接收器,这取决于手机上安装的应用程序,但你可以给予你的应用程序优先收听消息。虽然,当一个通知显示,消息将不会在短信数据库中,所以你需要使用abortBroadcast()停止其他应用程序被通知。见下面的例子:
您需要在清单中声明接收方,如下所示:
最后,确保您在清单中具有RECEIVE_SMS的权限。
p8h8hvxi2#
从Android 4.4开始,您在问题中要求执行的操作是不可能的
自Android 4.4版本起,如果您的应用不是默认消息应用,您将无法执行已接受答案中承诺的操作。您既无法阻止默认消息应用接收通知,也无法删除短信。