Android 如何使用按钮OnClickListener在FloatWindow中获取活动上下文

Android 如何使用按钮OnClickListener在FloatWindow中获取活动上下文,android,android-context,Android,Android Context,我有一个FloatWindow,它有一个静态方法,带有view.Button OnClickListener, 当我单击视图时,我希望在任何活动中显示对话框,但是上下文不能使用getApplicationContext,它将显示“无法添加窗口标记null不适用于应用程序”,那么当我单击视图时如何获取活动上下文 //the Para is getapplicationcontext,but is not work public static void createStatusWindow(Co

我有一个FloatWindow,它有一个静态方法,带有
view.Button OnClickListener
, 当我单击视图时,我希望在任何活动中显示对话框,但是上下文不能使用
getApplicationContext
,它将显示
“无法添加窗口标记null不适用于应用程序”
,那么当我单击视图时如何获取活动上下文

//the Para is getapplicationcontext,but is not work 

public static void createStatusWindow(Context context) {

        WindowManager windowManager = getWindowManager(context);
        int screenWidth = windowManager.getDefaultDisplay().getWidth();
        int screenHeight = windowManager.getDefaultDisplay().getHeight();

        if (statusWindow == null) {
            LayoutInflater mInflater = LayoutInflater.from(context);
            statusWindow = mInflater.inflate(R.layout.floatwindow, null);
            statusWindow.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    try {
       MessageBox.show("GPS Status", "Good", MessageBox.Icon.Alert,context,true);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            });
   }

尝试使用
yourActivityName。此


尝试使用
yourActivityName来代替
getApplicationContext()

代替
getApplicationContext()

您可以从活动中创建一个引用,然后将其传递给
createStatusWindow
方法:

public class YourActivity extends Activity{

private YourActivity mContext;

@Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        mContext = this;
        createStatusWindow(mContext);

}
现在将
createStatusWindow
方法中的
context
变量更改为final,如下所示:

public static void createStatusWindow(final Context context) {

        WindowManager windowManager = getWindowManager(context);
        int screenWidth = windowManager.getDefaultDisplay().getWidth();
        int screenHeight = windowManager.getDefaultDisplay().getHeight();

        if (statusWindow == null) {
            LayoutInflater mInflater = LayoutInflater.from(context);
            statusWindow = mInflater.inflate(R.layout.floatwindow, null);
            statusWindow.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    try {
       MessageBox.show("GPS Status", "Good", MessageBox.Icon.Alert,context,true);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            });
   }

它将起作用。

您可以从活动中创建一个引用,然后将其传递给您的
createStatusWindow
方法:

public class YourActivity extends Activity{

private YourActivity mContext;

@Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        mContext = this;
        createStatusWindow(mContext);

}
现在将
createStatusWindow
方法中的
context
变量更改为final,如下所示:

public static void createStatusWindow(final Context context) {

        WindowManager windowManager = getWindowManager(context);
        int screenWidth = windowManager.getDefaultDisplay().getWidth();
        int screenHeight = windowManager.getDefaultDisplay().getHeight();

        if (statusWindow == null) {
            LayoutInflater mInflater = LayoutInflater.from(context);
            statusWindow = mInflater.inflate(R.layout.floatwindow, null);
            statusWindow.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    try {
       MessageBox.show("GPS Status", "Good", MessageBox.Icon.Alert,context,true);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            });
   }


它会起作用的。

最终确定<代码>createStatusWindow(最终上下文)
很抱歉,我没有说清楚,我的createStatusWindow()在服务中,当应用首次打开时,它会工作,因此,在服务中我可以获得活动吗?服务也是一个上下文。请将其设置为最终<代码>createStatusWindow(最终上下文)
很抱歉,我没有说清楚,我的createStatusWindow()在服务中,当应用首次打开时,它会工作,因此,在服务中我可以获得活动吗?服务也是一个上下文。请将其设置为最终
createStatusWindow(最终上下文)
很抱歉,我没有说清楚,我的createStatusWindow()在一个服务中,当应用程序第一次打开时,它会工作,所以,在服务中我可以获得活动吗?服务也是一个上下文。但是我想在任何活动中显示对话框,所以活动名称无法修复,但我想在任何活动中显示对话框,所以活动名称无法修复,但我想在任何活动中显示对话框,所以活动名称无法修复抱歉,我没有说清楚,我的createStatusWindow()在服务中,当应用首次打开时,它会工作,所以,在服务中我可以获取活动吗?您可以将活动的引用传递给服务,并将其分配给上下文抱歉,我没有说清楚,我的createStatusWindow()在服务中,当应用首次打开时,它会工作,因此,在服务中我可以获取活动吗?您可以将活动的引用传递给服务,并将其分配给上下文抱歉,我没有说清楚,我的createStatusWindow()在服务中,当应用首次打开时,它会工作,因此,在服务中,我可以获取活动吗?您可以将活动的引用传递给服务,并将其分配给上下文