как остановить приложение от открытия в андроиде - PullRequest
0 голосов
/ 13 июля 2011

Я занимаюсь разработкой простого приложения для SMS в Android, я могу отправлять и получать сообщения.во время получения смс я хочу чтобы мое приложение открывалось всякий раз, когда пришло смс с определенного номера с некоторым уведомлением в приложении, и оно не должно открываться всякий раз, когда приходит неуказанный номер. Что я могу сделать, так это открывать приложение всякий раз, когда приходит сообщениес указанного номера, но не может остановить вызов моего приложения (если не указан номер).

Справка ..

Ответы [ 4 ]

0 голосов
/ 14 июля 2011

Ваша проблема лежит здесь:

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();
                }
            }
        }                         
    }
0 голосов
/ 13 июля 2011
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";        
        }
    }

Этот код, который вы пишете в своем приемнике рассылки, видит // код, который дает номер входящего сообщения, получает номер оттуда и проверяет номер тем номером, который вы хотите ограничить, если true, то не запускайте васзаявление, если ложное начало ваше приложение вот оно

Если вам нужна дополнительная помощь, прокомментируйте меня

0 голосов
/ 13 июля 2011

Вы должны обрабатывать событие получения смс в широковещательном приемнике, а не в активности. В методе 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
}
0 голосов
/ 13 июля 2011

Не рекомендуется открывать ваше приложение, когда приходит SMS. Представьте, что ваш пользователь играет в игру или смотрит youtube, и когда приходит SMS, ваше приложение появляется на переднем плане, и пользователь этого не ожидает. Это не нравится вашим пользователям. Хорошей практикой является внедрение службы, которая будет сканировать полученные SMS и проверять, указан номер или нет. Затем, если указан номер, вы можете добавить уведомление в панель уведомлений, чтобы пользователь увидел предупреждение. Когда пользователь нажимает на ваше уведомление, он открывает ваше приложение и видит информацию, которую вы предоставляете. Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...