android एंड्रॉइड फ्यूज़ेड स्थान की सेटिंग्सएपी एक से अधिक बार काम नहीं करती



google-maps gps (1)

ऐसा लगता है कि समस्या यह है कि आप हर बार LocationSettingsRequest.Builder पुन: निर्माण नहीं कर रहे हैं, क्योंकि आप इसे पुनः बनाते हैं यदि यह रिक्त है

मुझे एंड्रॉइड 4.4.4 और 6.0.1 दोनों पर काम करना पड़ा।

संवाद हर बार बटन दबाया जाता है (बशर्ते बटन को प्रेस के बीच डिवाइस पर स्थान अक्षम किया गया था):

public void checkLocationSetting() {
    mLocationRequest = LocationRequest.create();
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    mLocationRequest.setInterval(30 * 1000);
    mLocationRequest.setFastestInterval(5 * 1000);

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addLocationRequest(mLocationRequest);
    builder.setAlwaysShow(true);

    result = LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());

    result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
        @Override
        public void onResult(LocationSettingsResult result) {
            final Status status = result.getStatus();
            switch (status.getStatusCode()) {
                case LocationSettingsStatusCodes.SUCCESS:
                    // All location settings are satisfied. The client can initialize location
                    // requests here.
                    //...
                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    // Location settings are not satisfied. But could be fixed by showing the user
                    // a dialog.
                    try {
                        // Show the dialog by calling startResolutionForResult(),
                        // and check the result in onActivityResult().
                        status.startResolutionForResult(
                                MainActivity.this,
                                REQUEST_LOCATION);
                    } catch (IntentSender.SendIntentException e) {
                        // Ignore the error.
                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    // Location settings are not satisfied. However, we have no way to fix the
                    // settings so we won't show the dialog.
                    //...
                    break;
            }
        }
    });

}

निषिद्ध स्थान की जांच करने के लिए एक अद्भुत एपीआई है कि उपयोगकर्ता ने स्थान प्राप्त करने के लिए सभी प्रासंगिक सेटिंग्स को सक्षम किया है या नहीं। सेटिंग्सएपी को आग लगाने के लिए मैंने दस्तावेज़ https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApi का पालन किया है। उपयोगकर्ता की सेटिंग जांचने के लिए मेरा कोड निम्नानुसार है

private void checkLocationSetting()
{
    if (mLocationSettingsRequest == null)
    {
        mLocationSettingsRequest =
                new LocationSettingsRequest.Builder()
                        .addLocationRequest(mLocationRequest)
                        .setAlwaysShow(true)
                        .build();
    }

    PendingResult<LocationSettingsResult> result =
            LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, mLocationSettingsRequest);

    result.setResultCallback(new ResultCallback<LocationSettingsResult>()
    {
        @Override
        public void onResult(LocationSettingsResult result)
        {
            final Status status = result.getStatus();
            final LocationSettingsStates state = result.getLocationSettingsStates();
            switch (status.getStatusCode())
            {
                case LocationSettingsStatusCodes.SUCCESS:
                {
                    // All location settings are satisfied. The client can initialize location
                    // requests here.
                    requestNewLocationBySettingLocationReq();
                    break;
                }
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                {
                    // Location settings are not satisfied. But could be fixed by showing the user
                    // a dialog.
                    try
                    {
                        // Show the dialog by calling startResolutionForResult(),
                        // and check the result in onActivityResult().
                        status.startResolutionForResult(SpotToiletMap.this, REQUEST_CHECK_SETTINGS);
                    } catch (IntentSender.SendIntentException e)
                    {
                        // Ignore the error.
                    }
                    break;
                }
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                {
                    // Location settings are not satisfied. However, we have no way to fix the
                    // settings so we won't show the dialog.
                    MiscellaneousMethods.showGenericSnackBar(rootView, getString(R.string.location_settings_unavailable));
                    break;
                }
            }
        }
    });
}

कोड का यह टुकड़ा पहली बार ठीक काम करता है। इसके बाद, लंबित रिजल्ट कॉलबैक ने कभी काम नहीं किया। मैं भी logcat पर कोई लॉग नहीं मिल पा रहा था मेरे लिए यह एक कार्यान्वयन के मुद्दे की तरह दिखता है

इस मुद्दे को पुन: पेश करने का तरीका यहां है।

अपने जीपीएस को बंद करें विधि को कॉल करने की कोशिश करें और यह अपेक्षाकृत पूरी तरह से काम करता है यह मुझे जीपीएस पर स्विच करने के लिए पूछता है। स्थान अपडेट प्राप्त करने के बाद, जीपीएस को फिर से बंद करें और इस विधि को कॉल करें। जीपीएस को सक्षम करने के लिए मुझे एक डायलॉग कभी नहीं मिला। मैं इस पद्धति को एक बटन क्लिक करता हूं जो उपयोगकर्ता के नवीनतम स्थान को प्राप्त करने का प्रयास करता है।

संपादित करें: मैंने एक क्लास चर के रूप में PendingResult परिणाम घोषित करने की कोशिश की। अभी भी कोई भाग्य नहीं मैंने यह भी जांच कर एक बार परिणाम को शुरू करने की कोशिश की है कि क्या यह शून्य है, जैसा कि अपेक्षित है और जैसा कि Google के दस्तावेज़ में बताया गया है, इसका परिणाम अपवाद का उल्लेख पहले से ही खाया जाता है।





fusedlocationproviderapi