我正在android中开发一个简单的SMS应用程序,我能够发送和接收消息。 在接收短信期间,我希望我的应用程序应该打开,只要短信来自指定的号码,并在应用程序内有一些通知,并且它不应该在未指定的号码时打开。 我能做的是每当消息来自指定的号码但是无法阻止我的应用程序被调用时打开应用程序(包含未指定的号码)。
帮助..
答案 0 :(得分:0)
在SMS发布时打开您的应用程序并不是一个好主意。想象一下,您的用户正在玩游戏或观看YouTube,当短信出现时,您的应用程序会出现在前台,而无需用户期待。这对您的用户来说并不愉快。良好的做法是实施一项服务,该服务将扫描收到的短信并检查是否指定了号码。然后,如果指定了number,则可以向通知栏添加通知,以使用户看到警报。当用户点击您的通知时,他会打开您的应用并查看您提供的信息。希望这会对你有所帮助。
答案 1 :(得分:0)
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
str += "SMS from " + msgs[i].getOriginatingAddress();// note this line gives your contact number
str += " ::::::::::::::::::::";
str += msgs[i].getMessageBody().toString();
str += "\n";
}
}
这段代码是你在广播演员中写的 看//给出传入消息号的代码 从那里获取数字,并检查数字与你想要限制的数字,如果是真的然后不启动你的应用程序,如果错误启动你的应用程序
如果您需要更多帮助,请发表评论
答案 2 :(得分:0)
您需要在广播接收者处理短信接收事件,而不是活动。在broadcastreceiver的onReceive方法中,您可以过滤电话号码,如果是您感兴趣的电话号码,则可以启动您的活动。
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
if(phone number matches your filter){
startActivity(your intent);
}
}
}
}
并在清单中声明接收器:
<receiver android:name=".SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
编辑:你从系统获得的电话号码可能包含国家代码,区号等,因此你应该比较这样的字符串:
if(extractedNumber.contains(yourNumber)){
//do your stuff
}
答案 3 :(得分:0)
你的问题在于:
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
phNum = msgs[i].getOriginatingAddress();
if("9716009159".equals(phNum)){
str += "SMS from " + msgs[i].getOriginatingAddress();
str += " :";
str += msgs[i].getMessageBody().toString();
str += "\n";
abortBroadcast();
}
else{
clearAbortBroadcast();
}
}
//---display the new SMS message---
//Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
//---launch the MainActivity--
Intent mainActivityIntent = new Intent(context, MainActivity.class);
mainActivityIntent.putExtra("ph", phNum);
mainActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(mainActivityIntent);
//---send a broadcast to update the SMS received in the activity---
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("SMS_RECEIVED_ACTION");
broadcastIntent.putExtra("sms", str);
context.sendBroadcast(broadcastIntent);
}
}
只有当邮件来自您指定的号码时,才会启动您的活动。只要消息不为null,您就会启动活动。而不是上面的代码,使用这个:
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
phNum = msgs[i].getOriginatingAddress();
if("9716009159".equals(phNum)){
str += "SMS from " + msgs[i].getOriginatingAddress();
str += " :";
str += msgs[i].getMessageBody().toString();
str += "\n";
//---display the new SMS message---
//Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
//---launch the MainActivity--
Intent mainActivityIntent = new Intent(context, MainActivity.class);
mainActivityIntent.putExtra("ph", phNum);
mainActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(mainActivityIntent);
//---send a broadcast to update the SMS received in the activity---
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("SMS_RECEIVED_ACTION");
broadcastIntent.putExtra("sms", str);
context.sendBroadcast(broadcastIntent);
abortBroadcast();
}
else{
clearAbortBroadcast();
}
}
}
}