簡體   English   中英

GPS 設置為 ON 並且應用程序在首次啟動時崩潰

[英]GPS set to ON and app crashes at first start

我實現了一個使用 GPS 位置的應用程序,因此我正在處理權限。 該應用程序運行正常,所有位置都正確執行。 當我安裝應用程序時,第一個片段正確打開並向用戶顯示 GPS 權限的請求。 在這之后,我還添加了一個對話框,請求設置 GPS 以啟動應用程序。 如果在第一次啟動之前(安裝后)GPS 設置為 OFF,當應用程序啟動時,它會在后台顯示第一個片段,請求 GPS 權限,然后請求在設置里面設置 Z8C578DE37278ADA488D763EA86C5CF20。 如果在第一次啟動之前(安裝后)GPS 設置為 ON,當應用程序啟動時,它會在后台顯示第一個片段,請求 GPS 權限和應用程序崩潰維護請求 GPS 權限。 如果我按 OK,我會重新啟動應用程序並且一切正常。 為什么當 GPS on settings 設置為 ON 時會出現此問題? 下面是部分代碼:

在第一個片段上,onCreateView 我為 GPS 權限編寫了以下代碼:

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

    if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {

        if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)) {
            showAlert(getString(R.string.PermessoDisp), getString(R.string.PermessoDispTitle));

        } else {
            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSION_REQUEST_LOCATION);
        }
    } else {

    }

在 onStart() 我有:

   @Override
public void onStart() {
    super.onStart();
    if (isLocationEnabled()) {
        mGoogleApiClient.connect();
    } else {
        showAlertGPSSettings();
    }
}

其中 showAlertGPSSettings() 是要求用戶將 GPS 設置為 ON 以使用應用程序的方法。 我也有:

   @Override
public void onConnected(@Nullable Bundle bundle) {
    locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(1000);
    locationRequest.setFastestInterval(500);

   LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, locationRequest, this);
}

@Override
public void onConnectionSuspended(int i) {

}

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

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSION_REQUEST_LOCATION:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            } else {
            }
    }
}

當應用程序崩潰時(第一次啟動時 GPS 設置為 ON),我有以下錯誤:

java.lang.SecurityException: Client must have ACCESS_FINE_LOCATION permission to request PRIORITY_HIGH_ACCURACY locations.

錯誤所在的行位於 onConnected 方法內:

LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, locationRequest, this);

有什么建議嗎?

您是否在清單中添加了權限?

android.permission.ACCESS_COARSE_LOCATION 或 android.permission.ACCESS_FINE_LOCATION。

需要此權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM