2

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

Это, кажется, как простая вещь, но я потратил пару часов на этом сайте, и все, кажется, предлагая что-то вроде этого:

Intent intent = new Intent(myActivity.this, myActivity.class); 
startActivity(intent); 

Тем не менее, не доставляя приложение на передний план и запуская его.

Я получил его для работы с PendingIntent, запущенным из уведомления. Что я сделал по приведенному ниже коду. Но я хочу, чтобы приложение запускалось само по себе, не нажимая на уведомление пользователя.

Intent intent = new Intent(myActivity.this, myActivity.class); 
PendingIntent contentIntent = PendingIntent.getActivity(this, REQUEST_CODE, intent, 0); 
notification.setLatestEventInfo(this, "title", "msg", contentIntent); 

Я также попытался:

Intent intent = new Intent("android.intent.action.MAIN"); 
startActivity(intent); 

и маркировки намерения:

intent.setFlags(Intent.FLAG_FROM_BACKGROUND); 
intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

Но, кажется, не делать ничего, любая помощь приветствуется.

+0

забыл упомянуть мой андроид манифест выглядит следующим образом: <активность андроид: метка = "@ строка/app_name" андроид: имя = андроид "myActivity.": Тема = "@ андроид: стиль/Theme.Dialog " android: launchMode =" singleInstance "android: excludeFromRecents =" true "> zergy

+0

Когда в манифесте определяется как LAUNCHER, это означает, что это первое действие, запущенное при запуске приложения. Таким образом, неясно, как вы попали в фоновое задание без первого запуска myActivity. – ilomambo

+0

Сначала запускается MyActivity, затем я либо перехожу к другому приложению, либо просто ударяю по главному экрану, чтобы мое приложение работало в фоновом режиме. Это то, что вы просите? – zergy

ответ

0

Я закончил использовать ожидающее намерения и вместо того, чтобы пытаться использовать намерение. Что-то вроде этого: кажется намного более простым.

Intent.send(this, 0, intent);

Спасибо.

+1

Как вы решили эту проблему? – aProgrammer

+0

Где этот метод 'send()' исходящий? –

+0

PendingIntent pi = PendingIntent.getActivity (контекст, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); pi.send (это, 0, намерение); –

4

Вы должны быть в состоянии назвать собственное приложение, как это:

Intent intent = new Intent("android.intent.category.LAUNCHER"); 
intent.setClassName("com.your.package", "com.your.package.MainActivity"); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

Edit: Забыл добавить intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);

+0

Это тоже не похоже на трюк. – zergy

+0

Это странно, я проверил его и отлично работал здесь. Я начинаю подозревать, что это имеет какое-то отношение к андроиду: launchMode = "singleInstance" в вашем манифесте –

+0

Считаете ли вы использование android: launchMode = "singleTop"? singleInstance обычно не рекомендуется в соответствии с документами SDK. –

0

Из того, что я понимаю, вы хотите, чтобы , работающий в фоновом режиме и на определенном событии, вы хотите, чтобы активность вашего приложения была впереди, то есть на текущем экране пользователей, что бы он ни делал. Не рекомендуется позволять фоновому сервису запускать приложение без действия пользователя. Андроид веб-сайт разработчика говорит

Статус, панель уведомлений следует использовать для любого случая, в котором фоновая служба должна предупредить пользователя о событии, которое требует ответа. Фоновая служба никогда не должна запускать активную работу самостоятельно, чтобы получить взаимодействие с пользователем. Служба должна создать уведомление о состоянии, которое запустит действие , если оно будет выбрано пользователем.

Следовательно, не пытайтесь запускать его самостоятельно.

+0

. Я вижу, что многие приложения для экстренной помощи делают запуск alertdialog или приложения поверх устройства, но как они это делают, если не так? – zergy

+1

Точно, это нужно делать только для неотложных важных задач, таких как входящий звонок или будильник. Вы можете использовать setFullScreenIntent() 'http://developer.android.com/reference/android/app/Notification.Builder.html#setFullScreenIntent(android.app.PendingIntent, boolean)' – Alabhya

0

Я не позади моего ноутбука, поэтому я уверен, но я думаю, что вам нужно передать руку контекстного объекта, а затем сделать контекст.startactivity (намерение);

Извините за не вэй отформатированный Я на моем телефоне атм

Надежда Это помогает

+0

Пробовал myActivity.this.startactivity все еще didn Не работай, спасибо. – zergy

0

Я сжимал за соломинку здесь, но Вы писали:

MyActivity запущен первый, то я либо перейдите в другое приложение, либо просто нажмите на главный экран, чтобы мое приложение работало в фоновом режиме.

Таким образом, ваша исходная деятельность НЕ работает в фоновом режиме, когда вы нажали HOME, ее вполне можно было бы остановить и уничтожить. Ваша фоновая задача осталась сиротой и MyActivity.this is null на этом этапе.

Пробовать и проверять, что такое Log.i (TAG, MyActivity.this); Печать в LogCat.

+0

Это не null. Он возвращает [email protected] – zergy

Смежные вопросы