„Android“ paleisti veiklą nuo paslaugų

„Android“:

 public class LocationService extends Service { @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); startActivity(new Intent(this, activity.class)); } } 

Pradėjau šią paslaugą iš Activity

Activity , jei sąlyga atitinka pradžią

 startService(new Intent(WozzonActivity.this, LocationService.class)); 

iš mano minėtos „ LocationService nepavyko pradėti Activity , kaip galiu gauti dabartinės veiklos pradžios kontekstą paslaugų klasėje?

125
31 авг. nustatyti d-man 31 rug. 2010-08-31 09:44 '10 ne 9:44 2010-08-31 09:44
@ 6 atsakymai

Iš aptarnavimo klasės:

 Intent dialogIntent = new Intent(this, MyActivity.class); dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(dialogIntent); 
304
31 авг. atsakymą pateikė d-man 31 rug. 2010-08-31 12:57 '10, 12:57, 2010-08-31 12:57

Aš turėjau tą pačią problemą, ir noriu jus informuoti, kad nė vienas iš pirmiau minėtų nepadėjo. Kas dirbo man:

  Intent dialogIntent = new Intent(this, myActivity.class); dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); this.startActivity(dialogIntent); 

ir viename iš mano poklasių, saugomų atskirame faile, turėjau:

 public static Service myService; myService = this; new SubService(myService); Intent dialogIntent = new Intent(myService, myActivity.class); dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); myService.startActivity(dialogIntent); 

Visi kiti atsakymai davė man nullpointerexception .

16
20 дек. Atsakymą pateikė Andy 20 Dec. 2012-12-20 03:08 '12 at 3:08 2012-12-20 03:08

Kitas dalykas, kurį verta paminėti: nors pirmiau pateiktas atsakymas puikiai tinka, kai mūsų užduotis yra fone, vienintelis būdas tai padaryti yra, jei mūsų užduotis (pagaminta iš paslaugų + kai kurių veiksmų) buvo pirmoje vietoje (t.y. vienas iš mūsų veiksmų, matomų naudotojui) buvo:

  Intent intent = new Intent(storedActivity, MyActivity.class); intent.setAction(Intent.ACTION_VIEW); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); storedActivity.startActivity(intent); 

Nežinau, ar čia ACTION_VIEW arba FLAG_ACTIVITY_NEW_TASK yra naudojamas. Sėkmės raktas buvo

 storedActivity.startActivity(intent); 

ir, žinoma, FLAG_ACTIVITY_REORDER_TO_FRONT, kad vėl būtų sukurta operacija. Sėkmės!

8
08 авг. atsakymas pateikiamas kellogs 08 rug . 2011-08-08 10:45 '11, 10:45, 2011-08-08 10:45

Context Service negalima naudoti; galėtų gauti (paketas) Context :

 Intent intent = new Intent(getApplicationContext(), SomeActivity.class); 
1
12 февр. Martin Zeitler atsakymas, pateiktas vasario 12 d 2017-02-12 18:17 '17, 18:17 pm 2017-02-12 18:17

Kita vertus

Galite naudoti savo taikomųjų programų klasę ir skambinti iš kur jums reikia (ypač neaktyviems veiksmams).

 public class App extends Application { protected static Context context = null; @Override public void onCreate() { super.onCreate(); context = getApplicationContext(); } public static Context getContext() { return context; } } 

Užregistruokite savo paraiškų klasę:

 <application android:name="yourpackage.App" ... 

Tada skambinkite:

 App.getContext(); 
0
14 авг. atsakymas, kurį pateikė Jamesas 14 rug. 2014-08-14 16:16 '14, 16:16, 2014-08-14 16:16

Jei reikia grąžinti veiksmą bacgrounde iš savo paslaugos, siūlau šią nuorodą. Intent.FLAG_ACTIVITY_NEW_TASK nėra sprendimas.

ngn-wiki.ru.site/questions/51518 / ...

-1
24 июля '14 в 16:02 2014-07-24 16:02 atsakymas pateikiamas GMG liepos 24 d., 14 d., 16:02, 2014-07-24 16:02

Kiti klausimai apie „ ir „