質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1189閲覧

Androidstudio4.1 位置情報の取得について

fox8

総合スコア2

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2020/11/21 13:45

編集2020/11/21 13:46

前提・実現したいこと

現在位置を緯度経度で出力する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です。その他質問などございましたら何でも答えます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

緯度経度の入力にはExtended controlsを用いていると思うのですが、Locationの地図上でポイントした後に右下にあるSET LOCATIONボタンを押しているでしょうか?

Extended controls

投稿2020/11/21 14:53

keicha_hrs

総合スコア6768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fox8

2020/11/24 00:54

返信ありがとうございます。 参考書を見ながらやっているのですが、参考書にはSET LOCATIONを押さずに画面上に現在位置の緯度経度が出力されていました。
keicha_hrs

2020/11/24 09:49

まずは押して試していただけたのでしょうか? 参考書がどうであれ、現行のエミュレーターでは押さなければ緯度経度は反映されません。コードを見てもかなり古い参考書のように思います。Android Studioはバージョンが上がる度に機能がころころ変わるので、「参考書がこう書いてあるのだから間違いない」という考えは捨てた方がいいです。
fox8

2020/11/26 23:45

できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問