10

ロック画面から 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ロケーションサービスダイアログを表示できるロック画面はありますか?

ご助力ありがとうございます。

ここに画像の説明を入力

4

1 に答える 1

3

残念ながら、表示したいダイアログがアプリに属していないアクティビティに含まれているため、これは不可能です。

これは、 がこのアクティビティへの参照を取得したり、メソッドを呼び出したり、そのプロパティを でオーバーライドしたりできないことを意味しますAndroidManifest.xml

これが実際に不可能であることを確認するために、このアクティビティへの参照を取得するために、Google 位置情報サービスを使用し、同様の許可を求めるアプリの 1 つにを追加しActivityLifecycleListenerました。Application.onCreate()

ログ コードをいくつActivityLifecycleListener.onResume()か追加したところ、Google Play Services ダイアログが画面に表示されていても何もログに記録されていないことに気付きましたが、マニフェスト ファイルにあるアクティビティのログは期待どおりに機能しました。また、Android Studio で Logcat を使用してアプリを表示するには、Logcat フィルターを「フィルターなし」に設定する必要があります。これは、アプリがこのアクティビティを参照できないことを意味します。

于 2018-05-22T20:53:41.343 に答える