当前位置: 首页 > 知识库问答 >
问题:

在我的应用程序中使用Android默认GPS开关对话框

莘睿
2023-03-14

在我们的应用程序中,我们希望集成android默认GPS对话框。当GPS关闭,我们在谷歌地图应用程序中按下我的位置按钮时,会出现相同的对话框。还附上了我想要集成的对话框的图像。

  1. 单击“否”选项将关闭对话框。
  2. 单击是选项将直接激活设备的GPS。

我们现有的实现是当GPS关闭时,我们将应用程序重定向到设备的默认位置设置屏幕,从那里他/她可以打开位置。

期待答案。提前感谢。

共有3个答案

罗学真
2023-03-14

Ola Cabs正在使用最新发布的设置API来实现此功能。根据新的API,用户无需导航到设置页面即可启用位置服务,从而实现无缝集成。请阅读本文了解更多详细信息。

胡嘉歆
2023-03-14

import android.content.Intent;
import android.content.IntentSender;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.PendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.location.LocationSettingsRequest;
import com.google.android.gms.location.LocationSettingsResult;
import com.google.android.gms.location.LocationSettingsStatusCodes;

public class LocSettingsActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, ResultCallback {

    protected GoogleApiClient mGoogleApiClient;
    protected LocationRequest locationRequest;
    int REQUEST_CHECK_SETTINGS = 100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_loc_settings);

        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addApi(LocationServices.API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this).build();
        mGoogleApiClient.connect();

        locationRequest = LocationRequest.create();
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        locationRequest.setInterval(30 * 1000);
        locationRequest.setFastestInterval(5 * 1000);
    }

    @Override
    public void onConnected(@Nullable Bundle bundle) {

        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                .addLocationRequest(locationRequest);
        builder.setAlwaysShow(true);
        PendingResult result =
                LocationServices.SettingsApi.checkLocationSettings(
                        mGoogleApiClient,
                        builder.build()
                );

        result.setResultCallback(this);

    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    }

    @Override
    public void onResult(@NonNull LocationSettingsResult locationSettingsResult) {
        final Status status = locationSettingsResult.getStatus();
        switch (status.getStatusCode()) {
            case LocationSettingsStatusCodes.SUCCESS:

                // NO need to show the dialog;

                break;

            case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                //  Location settings are not satisfied. Show the user a dialog

                try {
                    // Show the dialog by calling startResolutionForResult(), and check the result
                    // in onActivityResult().

                    status.startResolutionForResult(LocSettingsActivity.this, REQUEST_CHECK_SETTINGS);

                } catch (IntentSender.SendIntentException e) {

                    //failed to show
                }
                break;

            case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                // Location settings are unavailable so not possible to show any dialog now
                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CHECK_SETTINGS) {

            if (resultCode == RESULT_OK) {

                Toast.makeText(getApplicationContext(), "GPS enabled", Toast.LENGTH_LONG).show();
            } else {

                Toast.makeText(getApplicationContext(), "GPS is not enabled", Toast.LENGTH_LONG).show();
            }

        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.google.android.gms:play-services-location:8.4.0'
}
段干俊茂
2023-03-14

您需要使用最新版本的Google Play服务。最新版本有一个对话框,可以激活获取GPS所需的所有内容。

从Android开发者播放服务留档,

位置设置-虽然FusedLocationProviderApi结合了多个传感器为您提供最佳位置,但您的应用程序接收到的位置的准确性仍然在很大程度上取决于设备上启用的设置(GPS、wifi、飞行模式等)。使用新的SettinsApi类,您可以打开一个位置设置对话框,该对话框显示一个一键式控件,供用户在不离开您的应用程序的情况下更改他们的设置。

链接指向播放服务版本文档。版本7.0引入了此新提示。

 类似资料:
  • 如果我们使用此代码,我们会看到一条消息:搜索GPS。然而,仅示出了GPS符号;GPS实际上不起作用: 为什么没用?以及如何使其正确工作?

  • 问题内容: 我正在开发一个短信阻止应用程序。直到果冻豆都可以正常工作。从奇特卡特(Kitkat)到棉花糖,它不起作用。我在Google上进行了搜索,每个人都建议使用征得用户的许可,以使其成为该手机的默认短信应用。 清单文件: 我使用了此代码示例。它显示一个带有手机短信应用程序的对话框。我的应用未显示在此列表中。 现在我也想在此列表中显示我的应用程序,因此用户可以从此列表中选择我的应用程序,它将是该

  • 问题内容: Tomcat5.5上部署的Web应用程序的默认会话超时是多少?它是特定于浏览器的吗?在我的Web应用程序中,默认超时没有在代码中或代码中提及。 问题答案: 打开并找到这个 所有Web应用程序都隐式继承自此默认Web描述符。您可以覆盖session-config以及在web.xml中定义的其他设置。 这实际上来自我的Tomcat 7(Windows),但我认为5.5 conf差别不大

  • 部署在Tomcat5.5上的Web应用程序的默认会话超时是多少?它是浏览器特定的吗?在我的Web应用程序中,默认超时在和代码中都没有提到。

  • 我对Android默认短信应用有些怀疑。 我必须创建一个应用程序,将需要读/写手机短信和彩信在Android短信/彩信数据库。为此,我需要使用“Content://sms/***”内容提供程序。 这个内容提供者不是SDK的一部分,所以我强烈建议不要在公共应用程序中使用它(上一个问题,Android Developerd博客)。

  • > 控制器只是实例化这个对象并返回。 在输出中,我看到Date对象的默认表示形式是一个整数(可能是历元的毫秒) 是否有任何方法可以将日期对象的默认jsonification更改为ISO字符串或任何其他字符串? 编辑: 我对Spring和Spring Boot很陌生。我使用的模板来自spring网站上的一个示例应用程序。JSONification是通过Jackson完成的。Rest一下,一般来说,我