在事件发生后以编程方式关闭Android设置

时间:2014-08-13 15:47:44

标签: android android-intent android-activity settings

因此,我创建了一个应用程序,可以自动为用户连接到Android上的无线显示器。我发现这样做的最简单方法是打开屏幕镜像设置。这使用户更容易,因此他们不必进行设置并自行启用。

现在我已连接到显示器,我希望屏幕镜像屏幕消失并返回应用程序或主屏幕(如果用户需要)。

以下是我用来打开屏幕镜像设置的代码,用于在用户点击按钮后将用户连接到显示器:

try 
{
    activityint = 1;
    Log.d("DEBUG", "open WiFi display settings in HTC");
    startActivityForResult(new Intent("com.htc.wifidisplay.CONFIGURE_MODE_NORMAL"),activityint);
} catch (Exception e) 
{
    try 
    {
        activityint = 2;
        Log.d("DEBUG", "open WiFi display settings in Samsung");
        startActivityForResult(new Intent("com.samsung.wfd.LAUNCH_WFD_PICKER_DLG"),activityint);
    }catch (Exception e2) 
    {
        activityint=3;
        Log.d("DEBUG", "open WiFi display settings in stock Android");
        startActivityForResult(new Intent("android.settings.WIFI_DISPLAY_SETTINGS"),activityint);
    }
}

然后我有一个侦听WIFI_P2P_CONNECTION_CHANGED_ACTION的广播接收器。发生这种情况时,它会在启动其他内容然后尝试关闭设置活动之前查看我们现在是否已连接。

@Override
public void onReceive(Context context, Intent intent) 
{
    String action = intent.getAction();
    if (action.equals(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION)) 
    {
        /**
        * What to do if the P2P connection has changed
        */
        try
        {
            NetworkInfo info = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);
            if(info!=null && info.isConnected())
            {

                connected(true);
                //Kill the settings activity
                finishActivity(activityint);

            }else if(info!=null && !info.isConnected())
            {
                connected(false);
            }
        }catch(Exception e)
        {
            Log.e("DEBUG", "exception", e);
        }
    }
}

问题是它在连接完成之前终止了设置活动。因此它将退出设置活动,并且屏幕镜像连接将在连接之前取消一会儿。是否有更好的方法或不同的方式可以退出“设置”活动?或者我在接收器中听错了意图?

由于

2 个答案:

答案 0 :(得分:0)

我能够在某个事件上关闭设置页面的唯一方法是使用Intent.FLAG_ACTIVITY_CLEAR_TOP标志重新开始我的活动。

这样,由于您的活动是打开设置活动的活动,因此该标志将使系统完成该活动。对于用户来说,设置活动似乎消失了。

答案 1 :(得分:-1)

我想我正在回答自己的问题。我发现这段代码允许我发送延迟响应。我知道这是糟糕的编程,因为有些设备会先于其他设备完成,但这对我来说很有用。如果有人知道更好的方法,请随时告诉我。

这是我的广播接收器的onReceive方法。

NetworkInfo info = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);
if(info!=null && info.isConnected())
{

    connected(true);
    new Handler().postDelayed(new Runnable() 
    { 
        public void run() 
        { 
            finishActivity(activityint);
        } 
    }, 5000); 


}else if(info!=null && !info.isConnected())
{
    connected(false);
}
编辑:这实际上对我不起作用。经过进一步测试后,我发现即使我刚打开应用程序,它会在一段时间后回到主屏幕。这很烦人。有人知道更好的主意吗?