从非活动类发出启动活动

时间:2012-09-07 14:00:32

标签: android class android-intent android-activity static

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

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

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

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

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

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

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

如何为startActivity设置适当的上下文?非常感谢任何帮助。

3 个答案:

答案 0 :(得分:6)

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

修改: 拿一些像这样的静态变量...

public static Context mContext;

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

mContext = getBaseContext();

&安培; return mContext ...

public static Context getContext() {
    return mContext;
}

&安培;将其调用到您的非活动类以开始活动...

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

答案 1 :(得分:1)

在开始活动之前尝试此设置此标志:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

希望它能奏效。

答案 2 :(得分:0)

您可以将活动的上下文(Map Activity)传递给您的类,然后使用它。