Issue starting activity from non-activity class

2019-09-15 02:06发布

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.

3条回答
The star\"
2楼-- · 2019-09-15 02:48

Try this before start the activity set this flag :

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Hope it will work.

查看更多
迷人小祖宗
3楼-- · 2019-09-15 02:53

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);
查看更多
不美不萌又怎样
4楼-- · 2019-09-15 02:59

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

查看更多
登录 后发表回答