如何在锁定屏幕上方/通过锁屏显示Google位置服务权限请求对话框?

时间:2015-11-21 20:00:29

标签: android lockscreen android-networking location-services android-gps

我试图通过锁定屏幕显示Google位置服务(打开GPS,网络数据等)对话框。

我使用KeyguardManager禁用锁定屏幕。这可以正常工作,因为我的MainActivity能够禁用锁定屏幕。但是,只要Google位置服务对话框显示,锁定屏幕就会恢复启用,屏幕会被锁定,除非我解锁屏幕,否则无法访问我的MainActivity。

我甚至试过...... Flag_Show_When_Locked,但它没有帮助。

这是我的代码:

private KeyguardLock DisableScreenLock; 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

    setContentView(R.main_layout);


    KeyguardManager myKeyGuard = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
    DisableScreenLock = myKeyGuard.newKeyguardLock("disableKeyguard");
    DisableScreenLock.disableKeyguard();
}


protected synchronized void GoogleApiClient_Intialize() {
    Log.e(TAG, "Building GoogleApiClient");
    googleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
}
protected void LocationRequest_Intialize() {
    locationRequest = new LocationRequest();
    locationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
    locationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}

protected void LocationSettingsRequest_Builder() {
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
    builder.addLocationRequest(locationRequest);
    locationSettingsRequest = builder.build();
}
@Override
public void onConnected(Bundle connectionHint) {
    Log.e(TAG, "GoogleApiClient is connected");
    LocationSettings_Check_Start();  
}
protected void LocationSettings_Check_Start() {
    PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(
                                                            googleApiClient, locationSettingsRequest);
    result.setResultCallback(this);
}

无论如何,我可以通过密码/模式/图钉等显示此Google位置服务对话框。锁定屏幕?

非常感谢你的帮助。

enter image description here

1 个答案:

答案 0 :(得分:2)

不幸的是,这是不可能的,因为您要显示的对话框包含在不属于您的应用的活动中。

这意味着既不能获得对此Activity的引用,也不能在其上调用方法,也不能使用AndroidManifest.xml覆盖其任何属性。

为确保无法做到这一点,我在其中一个使用Google位置服务的应用的ActivityLifecycleListener中添加了Application.onCreate(),并要求获得类似的许可,以便获得参考此活动。

ActivityLifecycleListener.onResume()我添加了一些日志记录代码,并注意到即使在屏幕上显示Google Play服务对话框时也没有记录任何内容,但是日志按照清单文件上的活动的预期工作。另外,要在Android Studio中使用Logcat查看应用程序,我必须将Logcat过滤器设置为&#34;没有过滤器&#34;,这意味着我的应用程序无法以任何方式引用此活动。