Начни активность с Сервиса - наверняка (Android) - PullRequest
2 голосов
/ 28 февраля 2011

Я пытаюсь просто запустить действие из службы в течение нескольких дней.Это не может быть так сложно!Все, что я хочу, это:

1) Запустить действие из фоновой службы (по расписанию AlarmManager).В настоящее время я делаю это с помощью этого кода

Intent i = new Intent(this, MyDialogActivity.class);
i.putExtra(MyDialogActivity.TEXT, myObject.getText());
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

2) Показывать это действие, если корневое действие находится сверху, или уничтожено действие root с помощью кнопки назад, или приостановлено действие root с помощью кнопки.кнопка «Домой»

3) Показывать это действие, когда устройство находится в режиме ожидания или нет (действие должно отображаться после того, как пользователь выведет устройство из режима ожидания)

4) Уничтожить действие обязательно иотправить трансляцию после того, как пользователь увидел активность и нажал кнопку (включая кнопку «домой» и «назад»).В настоящее время я делаю это с этим кодом (pm - PowerManager)

protected void onPause() {
    if (pm.isScreenOn()) {
        sendBroadcast(retValue);
        if (!isFinishing()) {
            finish();
        } else {
            moveTaskToBack(true);
        }
    } 
    super.onPause();
}

5) Предотвращение того, что это действие может быть запущено из другой точки, чем вызывающая служба.В настоящее время я делаю это с помощью установки этих атрибутов в AndroidManifest:

android: name = ". Activities.MyDialogActivity" android: noHistory = "true" android: excludeFromRecents = "true"

Но что бы я ни делал, я не могу понять, 2) и 3).Кто-нибудь может мне помочь?

Спасибо!

1 Ответ

1 голос
/ 16 апреля 2012

У меня были те же проблемы с запуском активности из службы. Я пытался запустить системную голосовую звонилку.

Мои проблемы были вызваны тем, что я использовал контекст приложения (this.getApplicationContext ()). Как только я изменился на «это», это сработало.

У меня работает этот код:

Intent intent = new Intent(Intent.ACTION_VOICE_COMMAND);    
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

Где я получаю контекст, используя:

public void onCreate() {
    super.onCreate();
    Log.i(TAG, "Service created");
    context = this;
    ...
}
...