В первой части мы перехватывали SMS-сообщения с помощью BroadcastReceiver. Во второй части , среди набора опций, мы решили передать необходимую информацию SMS (отправитель, сообщение и метка времени) в виде объекта Serializable «PopMessage» из фона на передний план. В этом разделе мы создадим экран для показа нашим пользователям.
Что мы хотим? Три вещи в основном:
- Получить смс информацию из фона
- Показать эту информацию пользователю во всплывающем окне
- Разрешить пользователю реагировать на это сообщение в приложении, либо отклонив его, либо ответив на него с помощью любимой программы 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();
}
Вот как это выглядит на экране телефона:
![]() |
Для того, чтобы иметь очень простое рабочее приложение, осталось обработать эти два нажатия кнопки и немного поговорить о неявных намерениях . В четвертой части
Источник: Блог Тони .
