Android
 Computer >> コンピューター >  >> プログラミング >> Android

AndroidでGPSをプログラムから有効・無効に切り替える方法【サンプルコード付き】

はじめに

この記事では、AndroidアプリからGPS(位置情報サービス)の状態を確認し、ボタン操作で位置情報設定画面を開いてGPSの有効・無効を切り替える方法を、サンプルコード付きでわかりやすく解説します。

なお、セキュリティ保護の観点から、Android 4.4(APIレベル19)以降では、一般アプリが直接GPSをON/OFFすることはできません。そのため本サンプルでは、Settings.ACTION_LOCATION_SOURCE_SETTINGSインテントを使ってシステムの位置情報設定画面を開き、ユーザー自身に切り替えてもらう方式を採用しています。これはGoogleが推奨する標準的なアプローチです。

手順1:新規プロジェクトを作成する

Android Studioを起動し、「File」→「New Project」を選択して、必要事項を入力のうえ新しいプロジェクトを作成します。

手順2:レイアウトファイル(activity_main.xml)を編集する

res/layout/activity_main.xml に以下のコードを追加します。画面中央に「Enable/Disable GPS」ボタンを配置し、その上に現在の位置情報サービスの状態を表示するTextViewを設置しています。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/buttonGps"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Enable/Disable GPS"/>
    <TextView
        android:id="@+id/textView"
        android:layout_centerInParent="true"
        android:layout_marginBottom="20dp"
        android:layout_above="@id/buttonGps"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:text="Location Services" />
</RelativeLayout>

手順3:MainActivity.java を実装する

src/MainActivity.java に以下のコードを追加します。LocationManagerを使ってGPSの有効状態を判定し、ボタンがタップされると位置情報設定画面へ遷移します。

import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    Button buttonGps;
    Context context;
    LocationManager locationManager;
    boolean GpsStatus;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
        buttonGps = findViewById(R.id.buttonGps);
        context = getApplicationContext();
        CheckGPSStatus();

        buttonGps.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(intent);
            }
        });
    }

    private void CheckGPSStatus() {
        locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        GpsStatus = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        if (GpsStatus) {
            textView.setText("Location Services Is Enabled");
        } else {
            textView.setText("Location Services Is Disabled");
        }
    }
}

コードのポイント

  • CheckGPSStatus()isProviderEnabled(LocationManager.GPS_PROVIDER)メソッドでGPSが有効かどうかを判定し、その結果をTextViewに表示します。
  • ACTION_LOCATION_SOURCE_SETTINGS:システム標準の位置情報設定画面を開くためのインテントアクションです。ユーザーはこの画面でGPSのON/OFFを切り替えます。
  • ACCESS_FINE_LOCATION:正確な位置情報を利用するために必須の権限です。Android 6.0以降では、実行時パーミッションとしてユーザーに許可を求める処理も別途必要になります。

手順4:AndroidManifest.xml に権限を追加する

androidManifest.xml に以下のコードを追加します。位置情報機能を使用するため、ACCESS_FINE_LOCATIONパーミッションの宣言が必須です。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <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>

アプリを実行して動作を確認する

それでは、実際にアプリを動かしてみましょう。ここでは、実機のAndroidスマートフォンをパソコンに接続しているものとします。Android Studioからアプリを実行するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。接続したモバイルデバイスを選択すると、スマートフォンに以下のような画面が表示されます。

AndroidでGPSをプログラムから有効・無効に切り替える方法【サンプルコード付き】

AndroidでGPSをプログラムから有効・無効に切り替える方法【サンプルコード付き】

AndroidでGPSをプログラムから有効・無効に切り替える方法【サンプルコード付き】


AndroidでGPSをプログラムから有効・無効に切り替える方法【サンプルコード付き】

  1. AndroidでGoogleフィード(Discover)を有効・無効にする完全ガイド

    Googleフィード(Google Discover)は、Googleが提供する非常に便利な機能のひとつです。ユーザーの興味や関心に基づいて、ニュースや情報が自動的にまとめられ、あなただけのために特別にキュレーションされます。例えば、応援しているチームの試合のリアルタイムスコアや、お気に入りのテレビ番組に関する記事など、自分に合ったストーリーやニュースが表示されます。さらに、表示されるコンテンツの種類はカスタマイズ可能で、Googleに興味関心に関するデータを提供すればするほど、フィードの関連性は高まっていきます。 現在、Android 6.0(Marshmallow)以降を搭載するほとんど

  2. 【Android】アプリアイコンバッジの有効化・無効化を切り替える方法

    Androidスマートフォンを使っている方なら、通知を受け取るとロック画面にアラートとして表示されることをご存じでしょう。ロックを解除して通知シェードを下にスワイプすれば、通知内容を簡単に確認できます。さらに、LEDライトを点灯させて通知をお知らせする機能を利用している方も多いはずです。しかし、アプリアイコンバッジですべての未読通知を確認したい場合、多くのAndroid端末ではこの機能がデフォルトで有効になっていません。アプリアイコンバッジ機能とは、各アプリのアイコン上に、そのアプリの未読通知件数を数字で表示する機能です。iPhoneユーザーにはおなじみの機能で、iOSでは標準搭載されています