как начать действие, когда основное действие выполняется в фоновом режиме? - PullRequest
3 голосов
/ 10 января 2010

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

Я попытался включить его следующим образом:

@Override
public void onProductsResponse(List<Product> products) {
    this.products = products;
    moboolo.setProducts(products);
    if(moboolo.getAutomaticNotificationsMode() != 0 && products.size() > 0){
        if(isRunningInBackground)
        {
            Intent intent = new Intent(this, ProductListActivity.class);
            intent.setAction(Intent.ACTION_MAIN);
            startActivity(intent);
        }
    }
    drawProducts(products);

}

это метод из основной деятельности. Когда onPause () выполняется isRunningInBackground устанавливается в true. Когда я пытался отладить его, когда основное приложение работало в фоновом режиме, строка

startActivity (намерение) не оказало эффекта (активность не появилась).

Кто-нибудь знает, как выполнить посредничество логики, чтобы запустить действие из основного действия, когда основное действие выполняется в фоновом режиме (после вызова onPause ())?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 10 января 2010

Вы не можете заставить Activity появляться из приложения, работающего в фоновом режиме. В документации написано :

Если приложение работает в фоновом режиме и требует внимания пользователя, приложение должно создать уведомление, позволяющее пользователю отвечать по своему усмотрению.

Если ваш Activity приостановлен, пользователь может делать что-то еще в другом приложении и, возможно, не хочет, чтобы ваш Activity внезапно появился поверх того, что он делает в данный момент.

Вы должны использовать Уведомление о статусной строке . Это позволяет вашему приложению поместить значок в строке состояния. Затем пользователь может сдвинуть ящик строки состояния и щелкнуть уведомление, чтобы открыть приложение и показать соответствующий Activity. Именно так подавляющее большинство приложений Android уведомляет пользователя о работе в фоновом режиме.

4 голосов
/ 03 марта 2016

Чтобы завершить ответ Хемендры, вам не нужны эти флаги, кроме FLAG_ACTIVITY_REORDER_TO_FRONT. Вам просто нужно создать PendingIntent из вашего обычного намерения и вызвать метод send () нового PendingIntent для отправки намерения. Вот как я это сделал:

Intent yourIntent = new Intent(this, YourActivity.class);
// You can send extra info (as a bundle/serializable) to your activity as you do 
// with a normal intent. This is not necessary of course.
yourIntent.putExtra("ExtraInfo", extraInfo); 
// The following flag is necessary, otherwise at least on some devices (verified on Samsung 
// Galaxy S3) your activity starts, but it starts in the background i.e. the user
// doesn't see the UI
yourIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, 
                                                        yourIntent, 0);
try {
    pendingIntent.send(getApplicationContext(), 0, yourIntent);
} catch (Exception e) {
    Log.e(TAG, Arrays.toString(e.getStackTrace()));
}
2 голосов
/ 12 декабря 2013
Intent i= new Intent("android.intent.category.LAUNCHER");
i.setClass(getApplicationContext(), MyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
PendingIntent i2 = PendingIntent.getActivity(getApplicationContext(), 0, insIntent,Intent.FLAG_ACTIVITY_NEW_TASK);
try {
     i2.send(getApplicationContext(), 0, i);
} catch (Exception e) {
     e.printStackTrace();
}

И на MyActivity onCreate ...

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

Это переведет вашу активность на фронтальное событие, если основная активность выполняется в фоновом режиме.

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