【问题标题】:Geolocation issues地理位置问题
【发布时间】:2019-12-18 13:33:11
【问题描述】:

请帮我解决这个问题。每当我启动我的应用程序时,代码都会崩溃。我是安卓的初学者。我的代码:

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <uses-permission android:name="android.permission.INTERNET"/>


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

这是我的xml代码activity_main.xml:

    <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:id="@+id/tv1"/>

</android.support.constraint.ConstraintLayout>

这是我的java代码:

    package com.example.myapplication;

import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    LocationManager mLocationManager;
    TextView tv;

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

        tv=(TextView) findViewById(R.id.tv1);

        mLocationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);

        Criteria criteria=new Criteria();

        criteria.setAccuracy(Criteria.ACCURACY_FINE);

        criteria.setPowerRequirement(Criteria.POWER_LOW);

        String locationprovider=mLocationManager.getBestProvider(criteria,true);

        Location mLocation=mLocationManager.getLastKnownLocation(locationprovider);

        tv.setText("LAST LOCATION LAT:"+mLocation.getLatitude()+"long:"+mLocation.getLongitude());

    }
}

每当我运行此代码时,应用程序都会自动崩溃。我不知道为什么会这样。 提前谢谢,请说我应该改变什么,原因是什么。

【问题讨论】:

  • I dont know why it happens 如果您不发布您的 logcat,我们如何解决?
  • 如上所述,您应该将您的 LogCat 放在问题中。话虽如此,我可以看到您在运行时请求位置数据而不寻求权限

标签: android geocoding


【解决方案1】:

您似乎试图在未获得用户许可的情况下发出位置请求。

您需要在运行时要求用户明确接受位置权限。您可以通过将以下代码添加到您的 MainActivity 来做到这一点。

设置完成后,您只需在 onCreate 方法中调用 checkLocationPermission();

这是一个未经测试的示例,它并不完全彻底,但它应该可以帮助您。

Here 是一个更深入的例子。

public static final int LOCATION_PERMISSIONS_CODE = 99;

public boolean checkLocationPermission() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        // Should we show permission rationale
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) {

            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
            alertDialogBuilder.setTitle("Request Location");
            alertDialogBuilder.setMessage("Access to Location data required");
            alertDialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            //carry out permisison request on button tap
                            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSIONS_CODE);
                        }
                    });
            alertDialogBuilder.create();
            alertDialogBuilder.show();

        } else {
            // here we can go ahead and carry out permission request
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSIONS_CODE);
        }
        return false;
    } else {
        return true;
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case LOCATION_PERMISSIONS_CODE: {
            // check if request has the same code as LOCATION_PERMISSIONS_CODE and has been granted
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted
                if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                    //Request location updates:
                }

            } else {
                // permission denied
            }
            return;
        }

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多