前提・実現したいこと
現在位置を緯度経度で出力するAndroidアプリを開発しているのですが、出力結果がどこでやっても同じ緯度と経度になってしまいます。つまり、現在位置ではなくなってしまっています。出力された緯度と経度をGoogle Mapで調べてみると中国にピンがささっていました。どなたかわかるかたがいらっしゃいましたらよろしくお願いします。
該当のソースコード
LocationExx
1package net.npaka.locationexx; 2 3import android.Manifest; 4import android.app.Activity; 5import android.content.Context; 6import android.content.pm.PackageManager; 7import android.graphics.Color; 8import android.location.Location; 9import android.location.LocationListener; 10import android.location.LocationManager; 11import android.os.Bundle; 12import android.view.ViewGroup; 13import android.view.Window; 14import android.widget.LinearLayout; 15import android.widget.TextView; 16 17import androidx.core.app.ActivityCompat; 18import androidx.core.content.ContextCompat; 19 20//位置情報の取得 21public class LocationEx extends Activity implements LocationListener { 22 public final static String BR = System.getProperty("line.separator"); 23 private final static int WC = ViewGroup.LayoutParams.WRAP_CONTENT; 24 private final static String[] PERMISSIONS = { 25 Manifest.permission.ACCESS_COARSE_LOCATION, 26 Manifest.permission.ACCESS_FINE_LOCATION}; 27 private final static int REQUEST_PERMISSION = 1; 28 private TextView textView;//テキストビュー 29 private LocationManager manager; 30 31 @Override 32 public void onCreate(Bundle bundle) { 33 super.onCreate(bundle); 34 requestWindowFeature(Window.FEATURE_NO_TITLE); 35 36 //レイアウトの作成 37 LinearLayout layout = new LinearLayout(this); 38 layout.setBackgroundColor(Color.WHITE); 39 layout.setOrientation(LinearLayout.VERTICAL); 40 41 //テキストビューの生成 42 textView = new TextView(this); 43 textView.setText("LocationEx"); 44 textView.setTextSize(24); 45 textView.setTextColor(Color.BLACK); 46 textView.setLayoutParams(new LinearLayout.LayoutParams(WC, WC)); 47 layout.addView(textView);//追加 48 setContentView(layout);//追加 49 50 //ロケーションマネージャーの取得 51 manager 52 = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 53 54 //ユーザー利用許可のチェック 55 checkPermissions(); 56 57 } 58 59 //アクティビティ再開時に呼ばれる 60 @Override 61 public void onResume() { 62 super.onResume(); 63 64 //位置情報更新の開始 65 setLocationUpdateEnabled(true); 66 } 67 68 //アクティビティ一時停止時に呼ばれる 69 @Override 70 public void onPause() { 71 super.onPause(); 72 73 //位置情報更新の開始 74 setLocationUpdateEnabled(false); 75 } 76 77 //位置情報を通知する時に呼ばれる 78 public void onLocationChanged(Location location) { 79 //緯度と経度の取得 80 textView.setText(String.format("LocationEx>%s緯度:%s%s経度:%s", BR, location.getLatitude(), BR, location.getLongitude())); 81 } 82 83 //位置情報取得有効化を通知する時に呼ばれる 84 public void onProviderEnabled(String provider) { 85 } 86 87 //位置情報取得無効化を通知する時に呼ばれる 88 public void onProviderDisabled(String provider) { 89 } 90 91 //位置情報更新の開始・停止 92 private void setLocationUpdateEnabled(boolean enabled) { 93 //パーミッションのチェック 94 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 95 return; 96 } 97 if (!isGranted()) { 98 return; 99 } 100 101 //ロケーションマネージャの登録と解除 102 try { 103 if (enabled) { 104 manager.requestLocationUpdates( 105 LocationManager.GPS_PROVIDER, 0, 0, this); 106 } else { 107 manager.removeUpdates(this); 108 } 109 } catch (SecurityException e) { 110 e.printStackTrace(); 111 } 112 } 113 114 //ユーザーの利用許可のチェック 115 private void checkPermissions() { 116 //未許可 117 if(!isGranted()) { 118 //許可ダイアログの表示 119 ActivityCompat.requestPermissions(this, PERMISSIONS, 120 REQUEST_PERMISSION); 121 } 122 } 123 124 //ユーザーの利用許可が済かどうかの取得 125 private boolean isGranted() 126 { 127 for (String permission : PERMISSIONS) { 128 if (ContextCompat.checkSelfPermission(LocationEx.this, permission) != 129 PackageManager.PERMISSION_GRANTED) { 130 return false; 131 } 132 } 133 return true; 134 } 135 136 //許可ダイアログ選択時に呼ばれる 137 @Override 138 public void onRequestPermissionsResult(int requestCode, 139 String[] permissions, int[] results) { 140 if (requestCode == REQUEST_PERMISSION) { 141 //未許可 142 if (!isGranted()) textView.setText(String.format("LocationEx>%s位置情報の取得が未許可です。", BR)); 143 } else{ 144 super.onRequestPermissionsResult(requestCode, permissions, results); 145 } 146 } 147} 148
AndroidManifest
1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3package="net.npaka.locationexx"> 4 5 6<uses-permission android:name="android.permission.INTERNET"/> 7 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 8 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 9 <uses-permission android:name="android.permission.MOCK_ACCESS_LOCATION"/> 10 11 12<application 13 android:allowBackup="true" 14 android:icon="@mipmap/ic_launcher" 15 android:label="@string/app_name" 16 android:supportsRtl="false" 17 android:theme="@style/Theme.LocationExx"> 18 19 <activity 20 android:label="@string/app_name" 21 android:name=".LocationEx"> 22 <intent-filter> 23 <action android:name="android.intent.action.MAIN" /> 24 <category android:name="android.intent.category.LAUNCHER" /> 25 </intent-filter> 26 </activity> 27</application> 28 29</manifest>
試したこと
一時的なバグだと思い2つの市で試したのですが同じ緯度経度が出力されました。
補足情報
開発環境はAndroidStudio4.1、Windows10、Android Gradle Plugin Ver4.1.0、Gradle Ver6.5.1、エミュレーターはPixel 4_API30、使用言語はJavaです。その他質問などございましたら何でも答えます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/24 00:54
2020/11/24 09:49
2020/11/26 23:45