Подтвердить что ты не робот

Как запустить активность в фоновом режиме на Android

В моем приложении мне нужно отправить текстовое сообщение пользователю через определенный интервал. Для этого мне нужно запустить код отправки сообщения в фоновом режиме. Я использую диспетчер аварийных сигналов, чтобы начать работу в определенное время. Что делать? Есть ли другой способ сделать это?

4b9b3361

Ответ 1

Вы можете изучить Services, которые в основном являются объектами без интерфейса.

Ответ 2

Для тех, кто хочет сделать это с помощью Activity, а не с помощью службы (могут быть ситуации, когда это необходимо), я сделал это, начав Activity обычным способом, а затем в Activity onCreate, который я отправил на заднем плане, вызывая moveTaskToBack (true).

См. Отправка запущенного приложения в фоновом режиме программно

Если вы используете этот метод, вы должны добавить дополнительную информацию о намерении, с помощью которого вы начинаете действие, чтобы он знал в onCreate, что он должен отправить себя на задний план. Вы делаете это, вызывая метод Intent putExtra. В Activity onCreate вы получаете Calling Intent с getIntent, а затем извлекаете информацию, которую вы там помещаете с помощью getStringExtra, например (я использовал дополнительную информацию о строке). См. Документацию для класса Intent.

Ответ 4

Это может помочь. Добавьте это в манифест андроида..:

использует-разрешение android: name= "android.permission.ACCESS_BACKGROUND_SERVICE"

Также используйте AsyncClass для ваших длинных/фоновых процессов. Подобно этому.

http://developer.android.com/reference/android/os/AsyncTask.html

Ответ 5

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

    (new AsyncTask<Void, Void, Void>() {
        boolean starting = false;
        @Override
        protected Void doInBackground(Void... params) {
            if(!externalServiceRunning()){
                Intent externalIntent = getPackageManager().getLaunchIntentForPackage("com.external...");
                if (externalIntent != null) {
                    starting = true;
                    startActivity(externalIntent);
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            if(starting) {
                Intent myApp = getPackageManager().getLaunchIntentForPackage("com.my.myapp");
                if (myApp != null) {
                    startActivity(myApp);
                }
            }
        }
    }).execute();