Issue starting activity from non-activity class

2019-09-15 02:49发布

问题:

I am a noob to android and I have a Map Activity that also uses OverlayItems. Within the onButtonTap method of my overlay class, I want to execute startActivity so i can then use intent.ACTION_CALL.

Intent callIntent = new Intent(Intent.ACTION_CALL);   
callIntent.setData(Uri.parse("tel:"+MapActivity.phonenumber0));
startActivity(callIntent);

in the code above i am asked to create a method for startActivity(Intent), which I don't understand. and when i try...

Intent callIntent = new Intent(Intent.ACTION_CALL);   
callIntent.setData(Uri.parse("tel:"+MapActivity.phonenumber0));
MapActivity.startActivity(callIntent);

It says i cannot make a static reference to a non static reference to a non-static method. And when I try to use the context of the object, which is the button being tapped it won't allow me to do so.

Intent callIntent = new Intent(Intent.ACTION_CALL);   
callIntent.setData(Uri.parse("tel:"+MapActivity.phonenumber0));
ContextObj.startActivity(callIntent);

And of course moving this block of code to the main Activity requires a static method which presents its own set of issues.

How can set the appropriate context for startActivity? Any help is greatly appreciated.

回答1:

you can create method in your MapActivity class like this to get context...

Edit : Take some static variable like this...

public static Context mContext;

In Activity's onCreate() method assign base context to it...

mContext = getBaseContext();

& return mContext...

public static Context getContext() {
    return mContext;
}

& call it in to your non activity class to start activity...

Intent callIntent = new Intent(Intent.ACTION_CALL);   
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
callIntent.setData(Uri.parse("tel:"+MapActivity.phonenumber0));
MapActivity.getContext().startActivity(callIntent);


回答2:

Try this before start the activity set this flag :

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Hope it will work.



回答3:

You can pass the context of the activity (Map Activity) to your class and then use it..