android start activity from service

后端 未结 7 1026
傲寒
傲寒 2020-11-22 03:04

Android:

public class LocationService extends Service {

@Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startI         


        
相关标签:
7条回答
  • 2020-11-22 03:26

    one cannot use the Context of the Service; was able to get the (package) Context alike:

    Intent intent = new Intent(getApplicationContext(), SomeActivity.class);
    
    0 讨论(0)
  • 2020-11-22 03:27

    Alternately,

    You can use your own Application class and call from wherever you needs (especially non-activities).

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

    And register your Application class :

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

    Then call :

    App.getContext();
    
    0 讨论(0)
  • 2020-11-22 03:29

    If you need to recal an Activity that is in bacgrounde, from your service, I suggest the following link. Intent.FLAG_ACTIVITY_NEW_TASK is not the solution.

    https://stackoverflow.com/a/8759867/1127429

    0 讨论(0)
  • 2020-11-22 03:36

    From inside the Service class:

    Intent dialogIntent = new Intent(this, MyActivity.class);
    dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(dialogIntent);
    
    0 讨论(0)
  • 2020-11-22 03:46

    I had the same problem, and want to let you know that none of the above worked for me. What worked for me was:

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

    and in one my subclasses, stored in a separate file I had to:

    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);
    

    All the other answers gave me a nullpointerexception.

    0 讨论(0)
  • 2020-11-22 03:47

    Another thing worth mentioning: while the answer above works just fine when our task is in the background, the only way I could make it work if our task (made of service + some activities) was in the foreground (i.e. one of our activities visible to user) was like this:

        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);
    

    I do not know whether ACTION_VIEW or FLAG_ACTIVITY_NEW_TASK are of any actual use here. The key to succeeding was

    storedActivity.startActivity(intent);
    

    and of course FLAG_ACTIVITY_REORDER_TO_FRONT for not instantiating the activity again. Best of luck!

    0 讨论(0)
提交回复
热议问题