У меня есть следующий код, в основном я получаю данные из веб-службы каждые 10 секунд и отображаю то, что получаю каждый раз, в диалоговом окне с предупреждением и уведомлением. Вопрос в том, как не открыть всплывающее предупреждение, если оно не было закрыто по сравнению с предыдущим циклом и все еще находится на странице, поэтому не будет одновременно открыто 2 или более одинаковых оповещения, которые должен закрыть пользователь.
public class myActivity extends Activity {
public class getActiveAlerts extends Thread {
public void run() {
while (true)
{
try {
.... code to get data from web service .....
Кажется, что даже когда AlertDialog присутствует и не затрагивается, когда наступают следующие 10 секунд, даже если старое предупреждение все еще там, «alert.isShowing» все еще показывает false и создает новое предупреждение с тем же свойства каждые 10 секунд. (Я бы подумал, если предупреждение будет открыто, alert.isShowing будет показывать true, а не создавать новое предупреждение. Я здесь что-то не так делаю или есть лучший способ сделать это?
И, наконец, я не верю, что есть способ определить, активно ли в данный момент уведомление / показывается ли оно и пока не закрыто. Существует ли стандартный способ проверки, отображается ли уведомление, когда поток вызывается для повторного запуска через 10 секунд, чтобы уведомление не создавалось каждые 10 секунд?
String root = doc.getDocumentElement().getNodeName();
//lets set alert title and msg to whatever "root" is for now, root contains the data I get from my web service.
myActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog.Builder alertBuild = new AlertDialog.Builder(myActivity.this);
alertBuild.setMessage(root)
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
AlertDialog alert = alertBuild.create();
if(alert.isShowing())
{
Log.v("alert", "isShowing==true");
}
else {
Log.v("alert", "isShowing==false");
alert.setTitle(root);
alert.setIcon(R.drawable.ic_launcher);
alert.show();
}
}
});
displayNotification(root, root);
}
}
}
}catch (SAXParseException err) {
Log.v(" " , err.getMessage ());
}catch (SAXException e) {
Exception x = e.getException ();
((x == null) ? e : x).printStackTrace ();
}catch (Throwable t) {
t.printStackTrace ();
}
try {
Thread.sleep(10000); // sleeps for 10 seconds then runs myActivity again
} catch (InterruptedException e) {
e.printStackTrace();
}
}// close while loop
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getActiveAlerts thread = new getActiveAlerts();
thread.start();
}
public void displayNotification(String msg, String desMsg)
{
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.ic_launcher, msg + "\n" + desMsg, System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(this, 1, new Intent(this, myActivity.class), 0);
notification.setLatestEventInfo(this, "new alert", "", contentIntent);
manager.notify(1, notification);
}