【问题标题】:How to show the Google Location Services permission request dialog above / through the lockscreen?如何在锁屏上方/通过锁屏显示 Google 位置服务权限请求对话框?
【发布时间】:2016-02-24 04:45:06
【问题描述】:

我正在尝试通过锁定屏幕显示 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);
}

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

非常感谢您的帮助。

【问题讨论】:

  • 我不确定,但我认为这是不可能的,因为需要解锁设备才能访问设置,这基本上就是这里发生的事情。
  • 我建议你开始对你的问题进行赏金,让有能力回答的人更容易看到它。
  • 谢谢大家。我希望其他人可以帮助我。
  • 我认为它不可能在锁定屏幕上显示任何对话框,但是您可以使用Notification 伪造它购买,一旦用户选择通知然后显示位置权限。

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


【解决方案1】:

很遗憾,这是不可能的,因为您要显示的对话框包含在不属于您的应用的 Activity 中。

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

为了确定这确实是不可能的,我在我的一个使用 Google 定位服务的应用程序的 Application.onCreate() 中添加了一个 ActivityLifecycleListener,并请求类似的权限,以便获得对此活动的引用.

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2022-09-26
    • 1970-01-01
    • 2018-01-07
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    相关资源
    最近更新 更多