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

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

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

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

791閲覧

Android Studio Kotlinにおいて、GPSを利用した位置情報の取得に関するエラーを解決したい。

gogatu

総合スコア7

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2023/11/05 10:12

編集2023/11/05 11:44

実現したいこと

Android Studio Kotlinにおいて、GPSを利用して位置情報を取得したい。

前提

https://note.com/c_omachi/n/nef100a0a23ad
を参考にさせていただき、GPSを用いて位置情報を取得しようとしている。

書かれてあるコードはjavaだが、Android Studioの変換機能でKotlinに変換、実装している。
しかし様々なところでUnresolved referenceのエラーが出て、全く手が付けられなくなってしまった(その他のエラーも一か所あり)。
また、2. 位置情報を取得するリスナーの登録をするの章がよくわからず、赤い電球からエラーをなくした結果下のようなコードとなっている。

ほとんどのコードはとりあえずそのまま参考元のサイトから写させていただいている状態です。

発生している問題・エラーメッセージ

Unresolved reference: getSystemService Unresolved reference: ACCESS_FINE_LOCATION Unresolved reference: ACCESS_FINE_LOCATION <html>None of the following functions can be called with the arguments supplied:<br/>public open fun requestLocationUpdates(minTimeMs: Long, minDistanceM: Float, criteria: Criteria, pendingIntent: PendingIntent): Unit defined in android.location.LocationManager<br/>public open fun requestLocationUpdates(provider: String, locationRequest: LocationRequest, executor: Executor, listener: LocationListener): Unit defined in android.location.LocationManager<br/>public open fun requestLocationUpdates(provider: String, minTimeMs: Long, minDistanceM: Float, pendingIntent: PendingIntent): Unit defined in android.location.LocationManager<br/>public open fun requestLocationUpdates(provider: String, minTimeMs: Long, minDistanceM: Float, listener: LocationListener): Unit defined in android.location.LocationManager <html>None of the following functions can be called with the arguments supplied:<br/>public open fun requestLocationUpdates(minTimeMs: Long, minDistanceM: Float, criteria: Criteria, pendingIntent: PendingIntent): Unit defined in android.location.LocationManager<br/>public open fun requestLocationUpdates(provider: String, locationRequest: LocationRequest, executor: Executor, listener: LocationListener): Unit defined in android.location.LocationManager<br/>public open fun requestLocationUpdates(provider: String, minTimeMs: Long, minDistanceM: Float, pendingIntent: PendingIntent): Unit defined in android.location.LocationManager<br/>public open fun requestLocationUpdates(provider: String, minTimeMs: Long, minDistanceM: Float, listener: LocationListener): Unit defined in android.location.LocationManager Unresolved reference: ACCESS_FINE_LOCATION

該当のソースコード

Kotlin

1package com.example.CompetitionApp 2 3//その他のことに使っているパッケージもあるため、今回のコードにおいて使用していないものもあります。 4package com.example.CompetitionApp 5 6import android.content.Context 7import android.content.pm.PackageManager 8import android.location.Location 9import android.location.LocationListener 10import android.location.LocationManager 11import android.os.Bundle 12import androidx.appcompat.app.AppCompatActivity 13import androidx.core.app.ActivityCompat 14import androidx.navigation.fragment.NavHostFragment 15import androidx.navigation.ui.NavigationUI 16import androidx.work.Constraints 17import androidx.work.PeriodicWorkRequestBuilder 18import androidx.work.WorkManager 19import com.google.android.material.bottomnavigation.BottomNavigationView 20import java.time.Duration 21 22 23abstract class MainActivity : AppCompatActivity(), LocationListener { 24 //private lateinit var binding: FragmentRoutesearchBinding 25 26 private val manager = WorkManager.getInstance() 27 28 private var locationmanager: LocationManager? = null 29 30 override fun onCreate(savedInstanceState: Bundle?) { 31 super.onCreate(savedInstanceState) 32 setContentView(R.layout.activity_main) 33 34 //エラー1 Unresolved reference: getSystemService 35 locationmanager = (locationmanager) getSystemService(Context.LOCATION_SERVICE) 36 } 37 38 override fun onResume() { 39 super.onResume() 40 41 //エラー2、3 Unresolved reference: ACCESS_FINE_LOCATION 42 if (ActivityCompat.checkSelfPermission( 43 this, 44 Manifest.permission.ACCESS_FINE_LOCATION 45 ) != PackageManager.PERMISSION_GRANTED 46 ) { 47 ActivityCompat.requestPermissions( 48 this, 49 arrayOf<String>(Manifest.permission.ACCESS_FINE_LOCATION), 50 1 51 ) 52 return 53 } 54 //エラー4,5 長いやつ 55 locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1, this) 56 locationmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 1, this) 57 } 58 59 override fun onStop() { 60 super.onStop() 61 if (locationmanager != null) { 62 63 //エラー6 Unresolved reference: ACCESS_FINE_LOCATION 64 if (ActivityCompat.checkSelfPermission( 65 this, 66 Manifest.permission.ACCESS_FINE_LOCATION 67 ) != PackageManager.PERMISSION_GRANTED 68 ) { 69 return 70 } 71 locationmanager!!.removeUpdates(this) 72 } 73 } 74 75 override fun onLocationChanged(location: Location) { 76 val text = "緯度:" + location.getLatitude() + "経度:" + location.getLongitude() 77 } 78} 79

試したこと

importしなければならないものに関しての確認、その他インターネットで調査をしたが、手掛かりは一つも手に入らなかった。

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

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

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

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

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

gogatu

2023/11/07 09:18

追記 現在jimbe様の回答により、以下のエラー以外はすべて解決しました。しかしいろいろ試しても相変わらずこのエラーがきえません。どなたかアドバイスをお願いいたします。 エラー内容 Unresolved reference: ACCESS_FINE_LOCATION
guest

回答1

0

ベストアンサー

いくらツールがあるとはいえ、変換は完璧ではありません。
元のプログラムも 2018 年 10 月の記事ですから、サポートライブラリを使っている等で今の開発環境には合わない・変わった部分もあります。
まず元のプログラムの動作を確認にした上で改造したほうが良いと思います。

AndroidManifest.xml には次のパーミッション設定を追加してください。

xml

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

java 版をまず直して動作確認をし、それを kotlin に手作業で移すと以下のようになりました。
エミュレータで動作を確認しています。

kotlin

1import android.Manifest 2import android.content.pm.PackageManager 3import android.location.Location 4import android.location.LocationListener 5import android.location.LocationManager 6import android.os.Bundle 7import android.widget.TextView 8import androidx.appcompat.app.AppCompatActivity 9 10class MainActivity : AppCompatActivity(), LocationListener { 11 private lateinit var manager: LocationManager 12 private lateinit var textView: TextView 13 14 override fun onCreate(savedInstanceState: Bundle?) { 15 super.onCreate(savedInstanceState) 16 setContentView(R.layout.activity_main) 17 18 textView = findViewById(R.id.textView) 19 20 manager = getSystemService(LOCATION_SERVICE) as LocationManager 21 } 22 23 override fun onResume() { 24 super.onResume() 25 26 if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 27 requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 1) 28 return 29 } 30 31 manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1f, this) 32 manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 1f, this) 33 } 34 35 override fun onStop() { 36 super.onStop() 37 38 if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 39 return 40 } 41 manager.removeUpdates(this) 42 } 43 44 override fun onLocationChanged(location: Location) { 45 textView.text = "緯度:" + location.latitude + "経度:" + location.longitude 46 } 47}

投稿2023/11/05 11:38

編集2023/11/05 11:43
jimbe

総合スコア13095

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

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

gogatu

2023/11/05 11:53 編集

ご回答ありがとうございます。 また、わざわざ手作業での変換までしていただき本当にありがとうございます。 いただいたプログラム通りに直したところ、 Unresolved reference: ACCESS_FINE_LOCATION <html>None of the following functions can be called with the arguments supplied:……Unit defined in android.location.LocationManager Unresolved reference: removeUpdates のエラーが出たままでした。もともとAndroidManifest.xmlのところにはコードを入力していたのですが、なぜエラーが出続けるかわかりますでしょうか。
jimbe

2023/11/05 13:37 編集

AndroidManifest.xml をご提示ください。タグを入れる場所を間違えていないでしょうか。 また、違う Manifest クラスを import していないか確認してください。
gogatu

2023/11/07 09:11 編集

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Competition_app" tools:targetApi="31"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> こちらがAndroidManifest.xmlです。ご確認をお願いいたします。
gogatu

2023/11/06 11:31

タブがうまく表示されていないようで見にくくなってしまっていてすみません。
gogatu

2023/11/07 09:06

追記 ACCESS_FINE_LOCATION以外のエラーは解決しました。
gogatu

2023/11/08 13:19

```Kotlin package com.example.competition_app import android.content.ContentValues import android.content.pm.PackageManager import android.location.Location import android.location.LocationListener import android.location.LocationManager import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import androidx.navigation.fragment.NavHostFragment import androidx.navigation.ui.NavigationUI import androidx.work.Constraints import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager import com.example.competitionapp.LocationInfoWorker import com.google.android.material.bottomnavigation.BottomNavigationView import java.time.Duration class MainActivity : AppCompatActivity(), LocationListener { private lateinit var manager: LocationManager @Suppress("DEPRECATION") private val workmanager = WorkManager.getInstance() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) manager = getSystemService(LOCATION_SERVICE) as LocationManager } override fun onResume() { super.onResume() if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { requestPermissions(arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION), 1) return } manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1f, this) manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 1f, this) } override fun onStop() { super.onStop() if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return } manager.removeUpdates(this) } override fun onLocationChanged(location: Location) { var text = "緯度:" + location.latitude + "経度:" + location.longitude Log.d(ContentValues.TAG, text) } } ``` とすることで解決しました!
jimbe

2023/11/08 14:49

質問及び回答のコメントにはマークダウンは使えません。コードの提示には質問に追加する形で編集してください。 ACCESS_FINE_LOCATION が無いというエラーについて、 ("android." を付けずに )"Manifest.permission.ACCESS_FINE_LOCATION" とだけ書くとアプリケーションで自動で作られる Manifest クラスを使う状態になってしまってエラーになってしまうということで、その『アプリケーションで自動で作られる Manifest クラス』について調べているのですが、言及している公的なドキュメントを探し出せていません。 R クラスのように "昔は java ファイルを生成してコンパイルしていたが今は直接バイトコードを生成している" 類なのかもしれませんが、 R クラスの生成はそのように変更されたという情報はあっても Manifest クラスは見当たらず、何者なのか。
gogatu

2023/11/08 22:07

つけていなくても動いている方もいらっしゃいますので、どこかのアップデート等のタイミングでこうなってしまったのかもしれませんね...こちらも一度完成目標のアプリが完成した後に調べてみようと思います。 jimbe様、コードの変換からエラーについての調査まで、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問