我正在建立一个Android应用程序,通过短信向用户提供信息。用户发送短信到APP中硬编码的预定号码,然后收到回复。
为了实现这一点,我在我的Android Manifest中使用广播接收器
<receiver android:name=".SMSReciever">
<intent-filter android:priority="2">
<action android:name=
"android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
如果我创建一个新类SMSReciever,那么当收到回复时,我会以某种方式将信息发送回用户在屏幕上打开的活动。我可以动态地在我的主要活动中执行此操作,以便可以使应用程序更具交互性吗?
我已经了解了Context.registerReciever方法,但是如何提及接收方的优先级?如果接收者没有更高的优先级,那么消息传递应用可能会阻止广播到达我的应用。有没有人遇到过类似这样的解决方案?
答案 0 :(得分:4)
我使用以下代码来实现我的目标!
IntentFilter fp = new IntentFilter();
fp.addAction("android.provider.Telephony.SMS_RECEIVED");
fp.setPriority(18);
//--- when the sms is received ---
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
//Processing for received broadcast happens here
}
}, fp);
答案 1 :(得分:1)
我自己没有测试过,但我已经通过Android源代码进行了快速搜索。
优先级被解析并保存到IntentFilter
(请参阅code)。因此,您可以创建IntentFilter
并使用其setPriority()
功能来设置广播接收器的优先级。
IntentFilter filter = new IntentFilter(...);
filter.setPriority(receiverPriority);// <-----
context.registerReceiver(filter, mBroadcastReceiver);
答案 2 :(得分:0)
我会通过使用com.example.intent.VERIFICATION_RECEIVED
之类的自定义意图操作以及从SMSReciever
广播此操作,然后让Activity
通过BroadcastReceiver
收听来解决此问题。< / p>
IntentFilter filter = new IntentFilter(PageFragment.ACTION_LOADING_DONE);
registerReceiver(new MyReceiver(), filter);
使用此方法,您可以在SMSReciever
中保持短信处理,而您的Activity
无需关心如何处理短信。