【问题标题】:programmatically close Android settings after event has occured事件发生后以编程方式关闭 Android 设置
【发布时间】:2014-10-07 01:50:41
【问题描述】:

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

现在我已连接到显示器,我希望 Screen Mirroring 屏幕消失并返回应用程序或用户需要时返回主屏幕。

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

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

问题在于它会在连接完成之前终止设置活动。因此,它将退出设置活动,并且 Screen Mirroring 连接将在连接之前取消。有没有更好的方法或不同的方法可以退出设置活动?还是我在听接收器中的错误意图?

谢谢

【问题讨论】:

    标签: android android-intent android-activity settings


    【解决方案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);
    }
    

    编辑:这实际上对我不起作用。经过进一步测试,我发现即使我只是打开应用程序,它也会在几分钟后将我踢回主屏幕。这很烦人。有人知道更好的主意吗?

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-02-24
        • 2019-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多