Доведите активность до себя - PullRequest
4 голосов
/ 20 июня 2011

Я хочу вывести фронт активности, когда отметится таймер, даже если активность приостановлена.

Большое спасибо ..

Мой код ниже:

package cem.examples.wsAct;

import something....

public class main extends Activity {

TextView tvResult, tvCount;
Button btn;
Timer timer;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

// setviews ....
// (find on the layout and bind them to the fields)

    timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
         // bring activity to front
                    f_UpdateUI(); 
                }
            });
        }

    }, 1000, 3000);
}

void f_UpdateUI() {
    String result = f_RetrieveFromWebService();

    // ??? Code... ???
    // If the activity is sended to back (how can I get it's state?)
    // Bring the activity even if it is paused or stopped (here is the lost part)
}

private String f_RetrieveFromWebService() {
// connect to web service and return string
    return "ta ta taaaaa";
}

}

Ответы [ 2 ]

2 голосов
/ 20 июня 2011

Не можете ли вы использовать AlarmManager?Для того, что я вижу, вам нужно, чтобы оно работало, даже если ваше приложение не запущено (после onPause и, возможно, onDestroy).

Если вам это не нужно, вы можете попробовать запустить ту же самую активность с помощью startActivity и используя некоторые из доступных флагов.Мне не ясно, что вам действительно нужно, когда вам нужно, поэтому попробуйте посмотреть на следующие флаги: FLAG_ACTIVITY_REORDER_TO_FRONT, FLAG_ACTIVITY_SINGLE_TOP, FLAG_ACTIVITY_CLEAR_TOP ... Вы прочитали все флаги ?Я уверен, что один из них (или набор) сделает то, что вы хотите.

0 голосов
/ 22 апреля 2015

Чтобы вывести свою активность на передний план, вам нужно сделать следующее:

Intent intent = new Intent(context, MyRootActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

MyRootActivity должно быть корневой активностью вашего приложения (с ACTION = MAIN и CATEGORY = DEFAULT).

Важно то, что вы должны делать это из контекста неактуальности. Значит, вам нужно сделать это либо из BroadcastReceiver, либо из Service.

См. Также этот ответ и интересную ветку комментариев

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