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

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

このチュートリアルでは、AndroidアプリからGPS(位置情報サービス)の現在の状態を確認し、ボタン操作で位置情報の設定画面を開いてGPSを有効・無効に切り替える方法を解説します。

注意:GPSを直接制御できない理由

セキュリティとプライバシー保護の観点から、一般アプリがシステム設定を直接書き換えてGPSを強制的にオン・オフすることは許可されていません。そこで本記事では、「LocationManagerでGPSの状態を判定する処理」と「ACTION_LOCATION_SOURCE_SETTINGSインテントでユーザーを設定画面へ誘導する処理」を組み合わせた実装方法を紹介します。

ステップ1:新規プロジェクトを作成

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

ステップ2:activity_main.xml にレイアウトを定義

res/layout/activity_main.xml に以下のコードを追加します。

<?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/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="70dp"
        android:text="Click Here to Enable Disable GPS
        location service!" />
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="132dp"
        android:gravity="center"
        android:text="location service Stauts Shows Here"
        android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>

ステップ3:MainActivity.java を実装

src/MainActivity.java に以下のコードを追加します。

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 {
    Button button;
    Context context;
    Intent intent1;
    TextView textview;
    LocationManager locationManager ;
    boolean GpsStatus ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button)findViewById(R.id.button1);
        textview = (TextView)findViewById(R.id.textView1);
        context = getApplicationContext();
        CheckGpsStatus();
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                intent1 = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(intent1);
            }
        });
    }
    public void CheckGpsStatus(){
        locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
        assert locationManager != null;
        GpsStatus = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        if(GpsStatus == true) {
            textview.setText("GPS Is Enabled");
        } else {
            textview.setText("GPS Is Disabled");
        }
    }
}

ステップ4:AndroidManifest.xml に権限を追加

androidManifest.xml に以下のコードを追加します。GPS_PROVIDERへアクセスするため、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>

コードのポイント解説

  • CheckGpsStatus():LocationManagerのisProviderEnabled(GPS_PROVIDER)メソッドで、GPSが現在有効かどうかを判定し、結果をTextViewに表示します。
  • onClick():ボタンがタップされるとACTION_LOCATION_SOURCE_SETTINGSインテントを発行し、端末の位置情報設定画面を開きます。ユーザーはそこでGPSのオン・オフを切り替えられます。

なお、本記事のコードは古いサポートライブラリ(android.support.v7)を使用しています。最新のAndroid Studioプロジェクトでは、androidx.appcompat.app.AppCompatActivityに置き換えてください。また、onResume()などのライフサイクルメソッド内でCheckGpsStatus()を再呼び出しすると、設定画面から戻ってきた際に最新のGPS状態を即座に反映できるのでおすすめです。

アプリを実行して確認

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

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

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

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

  1. AndroidでプログラムからScrollViewを無効化する方法

    このチュートリアルでは、AndroidアプリでScrollViewをプログラム的に無効化する方法を解説します。setOnTouchListener()を使ってタッチイベントを横取りすることで、ユーザーによるスクロール操作を防ぐことができます。 ステップ1:新規プロジェクトの作成 まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成してください。 ステップ2:レイアウトファイルの編集(res/layout/activity_main.xml) 以下のコードを res/lay

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

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