Статьи

Android SMS Popup — часть третья: активность

В первой части мы перехватывали SMS-сообщения с помощью BroadcastReceiver. Во второй части , среди набора опций, мы решили передать необходимую информацию SMS (отправитель, сообщение и метка времени) в виде объекта Serializable «PopMessage» из фона на передний план. В этом разделе мы создадим экран для показа нашим пользователям.

Что мы хотим? Три вещи в основном:

  1. Получить смс информацию из фона
  2. Показать эту информацию пользователю во всплывающем окне
  3. Разрешить пользователю реагировать на это сообщение в приложении, либо отклонив его, либо ответив на него с помощью любимой программы SMS своего телефона одним нажатием кнопки.

К настоящему времени вы, должно быть, прочитали раздел руководства Android-разработчика «
Действия» . Итак, давайте начнем кодировать наш
класс
PopSMSActivity, который будет предоставлять наш пользовательский интерфейс. На данный момент этот класс будет нашей единственной и основной деятельностью, объявленной в нашем манифесте Android:

<application ...>
     <activity  android:label="@string/app_name"
                android:name=".PopSMSActivity" ...>
                  <intent-filter >
                     <action android:name="android.intent.action.MAIN" />
                     <category android:name="android.intent.category.LAUNCHER" />
                  </intent-filter>
     </activity>
     ....
</application>

Мы объявляем одну операцию,
PopSMSActivity , в качестве основной точки входа в наше маленькое приложение. В целях разработки мы можем запустить наше приложение в любое время и посмотреть, как выглядит всплывающее окно, не дожидаясь прибытия SMS. Для пользовательского интерфейса существует несколько видов
компоновки , и это много XML. То, что нам сейчас нужно, — это что-то максимально простое, поэтому мы будем динамически программировать диалоговое окно оповещения Android.

Когда мы начнем создавать больше функций, нам придется использовать более сложный интерфейс макета и заменить основной модуль запуска на экран настроек, где мы будем выполнять все виды настройки, такие как выбор цветов, звуковые эффекты, всплывающее окно только для конкретных пользователей. Номера телефонов VIP и т. Д. И даже имеют кнопку «Предварительный просмотр», чтобы увидеть, как будет выглядеть наше всплывающее окно перед использованием, вместо того, чтобы запускать диалог напрямую, как мы это сделаем сейчас. А пока вот класс Activity:

 public class PopSMSActivity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // no need for XML layouts right now
        // we will use a dialog instead
        //setContentView(R.layout.main); 

        // retrieve Serializable sms message object
        // by the key "msg" used to pass it
        Intent in = this.getIntent();
        PopMessage msg = (PopMessage) in.getSerializableExtra("msg");

        // Case where we launch the app to test the UI
        // i.e. no incoming SMS
        if(msg == null){
                 msg = new PopMessage();
		 con.setPhone("0123456789");
		 msg.setTimestamp( System.currentTimeMillis() );
		 msg.setBody(" this is a test SMS message!");
        }
        showDialog(msg);
    }

Метод ShowDialog () создает очень простой пользовательский интерфейс, то есть типичное диалоговое окно Android с текстом и двумя кнопками:

      /***/
    private void showDialog(PopMessage msg){

    	final String sender = msg.getPhone();
    	final String body = msg.getBody();

    	final String display = sender + "\n"
                + msg.getShortDate( msg.getTimestamp() )+ "\n"
                + body + "\n";

        // Display in Alert Dialog
    	AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	builder.setMessage(display)
    	.setCancelable(false)
    	.setPositiveButton("Reply", new DialogInterface.OnClickListener() {
    		public void onClick(DialogInterface dialog, int id) {
                      // reply by calling SMS program
    		      smsReply(sender, body);
    		}
    	})
    	.setNegativeButton("Close", new DialogInterface.OnClickListener() {
    		public void onClick(DialogInterface dialog, int id) {
                      // go back to the phone home screen
    	              goHome();
    		}
    	});
    	AlertDialog alert = builder.create();
    	alert.show();
    }

Вот как это выглядит на экране телефона:

 

Для того, чтобы иметь очень простое рабочее приложение, осталось обработать эти два нажатия кнопки и немного поговорить о неявных намерениях . В четвертой части

Источник: Блог Тони .