如何阻止应用程序在android中打开
我正在用android开发一个简单的短信应用程序,我能够发送和接收信息。 在收到短信期间,我希望我的应用程序应该在短信来自指定号码时打开,并在应用程序中发出一些通知,而不应该在短信来自未指定号码时打开。。 我所能做的就是在消息来自指定号码时打开应用程序,但不能阻止调用我的应用程序(在未指定号码的情况下)如何阻止应用程序在android中打开,android,sms,Android,Sms,我正在用android开发一个简单的短信应用程序,我能够发送和接收信息。 在收到短信期间,我希望我的应用程序应该在短信来自指定号码时打开,并在应用程序中发出一些通知,而不应该在短信来自未指定号码时打开。。 我所能做的就是在消息来自指定号码时打开应用程序,但不能阻止调用我的应用程序(在未指定号码的情况下) 帮助..收到短信时打开应用程序不是一个好主意。想象您的用户正在玩游戏或观看youtube,当收到短信时,您的应用程序会出现在前台,而用户对此并不期待。这对用户来说是不愉快的。良好的实践是实现一项
帮助..收到短信时打开应用程序不是一个好主意。想象您的用户正在玩游戏或观看youtube,当收到短信时,您的应用程序会出现在前台,而用户对此并不期待。这对用户来说是不愉快的。良好的实践是实现一项服务,该服务将扫描收到的SMS并检查是否指定了号码。然后,如果指定了数字,则可以向通知栏添加通知,以使用户看到警报。当用户单击您的通知时,他会打开您的应用程序并查看您提供的信息。希望这对您有所帮助。
Bundle=intent.getExtras();
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";
}
}
SmsMessage[]msgs=null;
if(bundle!=null)
{
//---检索收到的SMS消息---
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];
对于(int i=0;i您需要在broadcastreceiver中处理sms received事件,而不是活动。在BroadcastReceive的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 (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);
}
}
if(bundle!=null)
{
//---检索收到的SMS消息---
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];
对于(int i=0;但我仍然不明白他如何才能阻止自己的应用程序对某个未指定的数字做出反应。?你给了他一个方法,让他知道自己在做什么,但他的问题呢?@Sumit,我给了他一个方法,让他在不必要的时候阻止应用程序运行,我认为这样比在必要的时候停止应用程序更好它已经在运行。@videre,我无法使用您的解决方案代码,因为我收到一个错误,说SMS_RECEIVED无法解析为变量。@abhinav,我使用的代码与您给我的代码几乎相同。我可以在相同的代码中设置if条件,但这并没有阻止应用程序打开,只有通知部分是手动的led(即当消息来自另一个号码时,应用程序被调用但通知不存在)@egor,谢谢你的建议,但我希望通知应该是应用程序专有的,而不是在通知栏中。当你收到短信时,你不能避免启动你的应用程序,你可以避免启动你的活动,我怀疑这就是你的意思。我想你的问题在于这一行:如果(“你的号码”。等于(phNum)).由于国家代码等原因。应该是:如果(phNum.包含(“您的号码”))我发现了问题。我已发布了另一个答案,因为我认为此答案中的信息仍然与其他人相关。
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);
}
}
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();
}
}
}
}