Передача данных из широковещательного приемника в другой вид деятельности - PullRequest
5 голосов
/ 04 февраля 2012

Привет У меня возникла проблема с широковещательными приемниками и передачей информации другому виду деятельности. Я пытаюсь создать приложение, которое будет перехватывать входящие SMS-сообщения, искать веб-сайт в тексте, а затем всплывающее диалоговое окно Alert с вопросом, хочет ли пользователь перейти на веб-сайт.

public class TextReceiver extends BroadcastReceiver{

public void onReceive(Context context, Intent intent)
{
    // .. other code that
    // sets received SMS into message

    Toast toast = Toast.makeText(context,
            "Received Text: " + message.getMessageBody(), Toast.LENGTH_LONG);
            toast.show();
 }

Чтобы код работал нормально, получите текст, который всплывает с сообщением. Тост бесполезен, но показывает, что приемник работает. Но я хочу общаться с действием, чтобы показать диалог оповещения и запустить веб-просмотр. Я уже запрограммировал код, который будет выполнять поиск строки для веб-сайта и открывать веб-представление. Можно ли получить строку из приемника вещания и сделать что-то вроде этого:

    public class ReceiveText extends Activity{
public void onCreate(Bundle savedInstanceState) {

// Somehow pass the string from the receiver into this activity, 
//stored in variable messages

findOpen(messages);

// is that possible?

}
public class findOpen(string messages){
// do stuff ... open alert...open site if OK
}

Так что в основном я просто хочу передать строку из Broadcast Receiver в другое действие, которое будет использовать эту строку. Остальная часть кода в основном на месте, все, что мне нужно, это строка ... Я новичок в этом и Java, и любая помощь будет высоко ценится. Спасибо

Ответы [ 2 ]

11 голосов
/ 04 февраля 2012

Если у вас есть ваша деятельность с именем ReceiveText, то в вашем BroadcastReceiver вы должны сделать следующее:

Intent i = new Intent(context, ReceiveText.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("message", message.getMessageBody());
context.startActivity(i);

Тогда в вашей деятельности вам нужно будет получить Экстра как:

Intent intent = getIntent();
String message = intent.getStringExtra("message");

И тогда вы будете использовать message по мере необходимости.

Если вы просто хотите, чтобы действие ReceiveText показывало сообщение в виде диалога, объявите <activity android:theme="@android:style/Theme.Dialog" /> в своем манифесте.для ReceiveText и затем установите в сообщении текстовое представление в упражнении.

Дайте мне знать, если мне нужно добавить что-нибудь еще.

8 голосов
/ 10 марта 2014
  1. Создание BroadcastReceiver в действии, в которое вы хотите получить данные, например:

    private BroadcastReceiver mServiceReceiver = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context, Intent intent)
        {
            //Extract your data - better to use constants...
            String IncomingSms=intent.getStringExtra("incomingSms");//
            String phoneNumber=intent.getStringExtra("incomingPhoneNumber");
    
        }
    };
    
  2. Отмена регистрации получателя на onPause():

    @Override
    protected void onPause() {
        super.onPause();
        try {
            if(mServiceReceiver != null){
            unregisterReceiver(mServiceReceiver);
            }
        } catch (Exception e) {
           e.printStackTrace();
        }
    }
    
  3. Зарегистрируйте его на onResume():

    protected void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.intent.action.SmsReceiver");
        registerReceiver(mServiceReceiver , filter);
    }
    
  4. Передайте ваши данные из службы через намерение, например:

    Intent i = new Intent("android.intent.action.SmsReceiver").putExtra("incomingSms", message);
    i.putExtra("incomingPhoneNumber", phoneNumber);
    context.sendBroadcast(i);
    

и все!GOODLUCK!

...