ホームページ > Java > &#&チュートリアル > Android の NETWORK プロバイダーを使用して現在の位置情報を取得できないのはなぜですか?

Android の NETWORK プロバイダーを使用して現在の位置情報を取得できないのはなぜですか?

DDD
リリース: 2024-11-25 16:31:14
オリジナル
279 人が閲覧しました

Why Am I Unable to Get My Current Location Using Android's NETWORK Provider?

Android で現在位置を取得する方法

Android 位置情報システムの NETWORK プロバイダーを使用して現在の位置座標を取得するときに問題が発生しています。さまざまな既存のクラスを実装しているにもかかわらず、まだ現在の座標を取得できません。

問題分析:

問題は、欠落している基本的な概念にある可能性があります。潜在的な問題は次のとおりです。

  • 位置情報のアクセス許可: AndroidManifest.xml ファイルで必要な位置情報のアクセス許可が宣言されていることを確認してください。 ACCESS_FINE_LOCATION および ACCESS_COARSE_LOCATION 権限が必要です。
  • 位置情報プロバイダー: NETWORK プロバイダーからの更新を正しく要求していることを確認してください。コードは、LocationManager.NETWORK_PROVIDER を使用して位置情報の更新を明示的に要求する必要があります。
  • LocationListener: 位置情報の更新を処理するには、LocationListener インターフェイスの実装と onLocationChanged メソッドのオーバーライドが不可欠です。

改訂済みコード:

これは、潜在的な問題に対処するコードの改訂版です。問題:

MainActivity.java:

import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_FINE_LOCATION = 123;
    private LocationManager locationManager;
    private TextView text;

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

        text = (TextView) findViewById(R.id.texts);

        // Check and request location permission
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_FINE_LOCATION);
        } else {
            initLocationManager();
        }
    }

    private void initLocationManager() {
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        // Request location updates from the NETWORK provider
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
        }
    }

    private LocationListener locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            if (location != null) {
                text.setText("Lat: " + location.getLatitude() + ", Lon: " + location.getLongitude());
            }
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }

        @Override
        public void onProviderEnabled(String provider) {
        }

        @Override
        public void onProviderDisabled(String provider) {
        }
    };

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == REQUEST_FINE_LOCATION && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            initLocationManager();
        }
    }
}
ログイン後にコピー

AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.locationtests">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

    </application>

</manifest>
ログイン後にコピー

この更新されたコードは解決します最も一般的な問題は、NETWORK プロバイダーを使用した Android での現在の位置の取得に関連します。

以上がAndroid の NETWORK プロバイダーを使用して現在の位置情報を取得できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート