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

Androidで現在のBluetoothアドレスを取得する方法【サンプルコード付き】

この記事では、Androidアプリでデバイスの現在のBluetoothアドレスを取得して画面に表示する方法を、実際に動くサンプルコードとともに段階的に解説します。

全体の流れ

実装は以下の4ステップで行います。

  1. Android Studioで新規プロジェクトを作成する
  2. レイアウトファイル(activity_main.xml)を編集する
  3. MainActivity.javaにBluetoothアドレス取得処理を書く
  4. AndroidManifest.xmlに必要なパーミッションを追加する

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

Android Studioを起動し、メニューから「File」→「New Project」を選択して、必要な項目を入力して新しいプロジェクトを作成します。テンプレートは「Empty Activity」で問題ありません。

ステップ2:レイアウトファイル(activity_main.xml)を編集する

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

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
   xmlns:app = "https://schemas.android.com/apk/res-auto"
   xmlns:tools = "https://schemas.android.com/tools"
   android:layout_width = "match_parent"
   android:gravity = "center"
   android:layout_height = "match_parent"
   tools:context = ".MainActivity">
   <TextView
      android:id = "@+id/text"
      android:textSize = "30sp"
      android:layout_width = "match_parent"
      android:layout_height = "match_parent" />
</LinearLayout>

このコードでは、取得したBluetoothアドレスを表示するためのTextViewを配置しています。

ステップ3:MainActivity.javaにコードを追加する

src/MainActivity.java を以下のように記述します。

package com.example.myapplication;
import android.bluetooth.BluetoothManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
   TextView textView;
   @RequiresApi(api = Build.VERSION_CODES.N)
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      textView = findViewById(R.id.text);
      final BluetoothManager manager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
      textView.setText(manager.getAdapter().getAddress());
   }
}

ポイントは以下の通りです。

  • getSystemService(BLUETOOTH_SERVICE)BluetoothManager のインスタンスを取得します。
  • manager.getAdapter().getAddress() を呼び出すことで、端末のBluetoothアドレス(MACアドレス)を文字列として取得できます。
  • 取得したアドレスをTextViewにセットして画面に表示しています。

ステップ4:AndroidManifest.xmlにパーミッションを追加する

androidManifest.xml に、Bluetoothを使用するための権限を宣言します。

<?xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns:android = "https://schemas.android.com/apk/res/android"
    package = "com.example.myapplication">
    <uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name = "android.permission.BLUETOOTH" />
    <uses-permission android:name = "android.permission.BLUETOOTH_ADMIN" />
    <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スマートフォンをPCに接続していることを前提としています。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。接続したモバイルデバイスを選択すると、実機の画面にBluetoothアドレスが表示されます。

Androidで現在のBluetoothアドレスを取得する方法【サンプルコード付き】

注意点:新しいAndroidバージョンでの挙動について

なお、Android 6.0(API 23)以降ではプライバシー保護のため、getAddress() が常に 02:00:00:00:00:00 のような固定値を返す仕様になっています。実際のMACアドレスが必要な場合は、WifiManagerSettings.Secure 経由で取得するか、別の識別子の利用を検討してください。また、Android 12(API 31)以降では Bluetooth API を利用する際に BLUETOOTH_CONNECT などのランタイム権限のリクエストが必須となるため、ターゲットSDKバージョンに応じて権限処理を実装することをおすすめします。

  1. Androidで現在のスレッドがデーモンかどうかを確認する方法【サンプルコード付き】

    はじめに:スレッドとデーモンスレッドとはスレッドとは、軽量なサブプロセスのことであり、UI(ユーザーインターフェース)を妨げることなくバックグラウンド処理を実行する仕組みです。本記事では、Androidアプリにおいて現在のスレッドがデーモンスレッドかどうかを確認する方法を、実際のサンプルコードとともにわかりやすく解説します。なお、デーモンスレッドとは、JVM(Java仮想マシン)の終了を待たずに動作するバックグラウンドスレッドのことです。UIを担当するメインスレッドは、通常デーモンには設定されていません。手順1:新しいプロジェクトを作成するまず、Android Studioで新しいプロジェクト

  2. 【Android】現在のスレッドIDを取得する方法を解説

    本記事では、Androidアプリで現在実行中のスレッドIDを取得する方法を、サンプルコードとともに解説します。スレッドとは?例に入る前に、まず「スレッド」について簡単におさらいしておきましょう。スレッドとは、軽量なサブプロセス(処理の単位)のことであり、UIの動作を妨げることなくバックグラウンドで処理を実行するために使われます。メインスレッドとは別に動作させることで、画面の描画やユーザー操作をブロックせずに、重い処理を並行して行うことが可能になります。このサンプルでは、Thread.currentThread().getId() を呼び出すことで、現在実行中のスレッドIDを取得し、TextVi