从非活动类发出启动活动

B. *_*ney 0 static android class android-intent android-activity

我是Android的菜鸟,我有一个也使用OverlayItems的Map Activity.在我的overlay类的onButtonTap方法中,我想执行startActivity,然后我可以使用intent.ACTION_CALL.

Intent callIntent = new Intent(Intent.ACTION_CALL);   
callIntent.setData(Uri.parse("tel:"+MapActivity.phonenumber0));
startActivity(callIntent);
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我被要求为startActivity(Intent)创建一个方法,我不明白.当我尝试......

Intent callIntent = new Intent(Intent.ACTION_CALL);   
callIntent.setData(Uri.parse("tel:"+MapActivity.phonenumber0));
MapActivity.startActivity(callIntent);
Run Code Online (Sandbox Code Playgroud)

它说我不能对非静态方法的非静态引用进行静态引用.当我尝试使用对象的上下文时,即被按下的按钮,它将不允许我这样做.

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

当然,将这段代码移动到主Activity需要一个静态方法,它提出了一系列问题.

如何为startActivity设置适当的上下文?任何帮助是极大的赞赏.

Pri*_*tel 6

您可以在MapActivity类中创建方法,以获取上下文...

编辑: 像这样采取一些静态变量......

public static Context mContext;
Run Code Online (Sandbox Code Playgroud)

在Activity的onCreate()方法中为它指定基本上下文...

mContext = getBaseContext();
Run Code Online (Sandbox Code Playgroud)

&return mContext ...

public static Context getContext() {
    return mContext;
}
Run Code Online (Sandbox Code Playgroud)

并将其调用到您的非活动类以开始活动...

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);
Run Code Online (Sandbox Code Playgroud)