آموزش کار با Bluetooth در برنامه نویسی اندروید

Bluetooth

با سلام خدمت شما برنامه نویسان عزیز و همراهان سایت Daseny. در این آموزش می خواهیم راجب Bluetooth در سیستم عامل اندروید صحبت کنیم.

ممکن است ما در برنامه خودمان بخواهیم فایلی را با بلوتوث ارسال کنیم. یا اینکه قصد داشته باشیم برنامه ای برای مدیریت بلوتوث بنویسیم و امکان روشن و خاموش کردن آن، قابل رویت کردن و … را به کاربر بدهیم. ولی ما به چه طریقی می توانیم با Bluetooth گوشی یا تبلت کار کنیم؟ برای جواب دادن به این سوال تا پایان این مقاله همراه ما باشید.

کار با Bluetooth در اندروید

ما در ابتدا لازم داریم که دو مجوز برای برنامه خودمان تعریف کنیم که امکان دسترسی به بلوتوث و کار با آن را داشته باشد. برای این کار دو Permission زیر را در AndroidManifest.xml تعریف می کنم.

<uses-permission android:name=”android.permission.BLUETOOTH” />
<uses-permission android:name=”android.permission.BLUETOOTH_ADMIN” />

در مرحله بعد چهار دکمه برای روشن کردن، خاموش کردن، قابل رویت کردن و نمایش لیست دستگاه های جفت شده و همچنین یک ListView برای نمایش نام این دستگاه ها، در Layout خودم ایجاد می کنم.

<Button
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content”
    android:text=”turn on”
    android:onClick=”turnOnClick”
    android:layout_marginBottom=”20dp”/>
<Button
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content”
    android:text=”turn off”
    android:onClick=”turnOffClick”
    android:layout_marginBottom=”20dp”/>
<Button
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content”
    android:text=”set visible”
    android:onClick=”setVisibleClick”
    android:layout_marginBottom=”20dp”/>
<Button
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content”
    android:text=”devices list”
    android:onClick=”devicesListClick”
    android:layout_marginBottom=”20dp”/>

<ListView
    android:id=”@+id/devicesList”
    android:layout_width=”match_parent”
    android:layout_height=”match_parent” />

اکنون به سراغ کد های جاوا برنامه می رویم. برای کار با بلوتوث باید یک نمونه از کلاس BluetoothAdapter تعریف کنیم. برای دریافت دستگاه های جفت شده هم به لیستی از کلاس BluetoothDevice نیاز داریم. همچنین برای ارتباط با ListView خودمان یک نمونه هم از این کلاس می سازیم.

BluetoothAdapter bluetoothAdapter;
Set<BluetoothDevice>bluetoothDevices;
ListView listView;

حال bluetoothAdapter و listView را در متد ()onCreate مقداردهی می کنم.

bluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
listView=findViewById(R.id.devicesList);

اکنون کد های اولیه برنامه ما به پایان رسید و باید ()onClick دکمه های خودمان را پیاده سازی کنیم.

روشن کردن Bluetooth

در ()onClick دکمه روشن کردن ابتدا بررسی می کنیم که بلوتوث روشن است یا خاموش. اگر روشن بود به کاربر اطلاع می دهیم و در غیر این صورت باید آن را فعال کنیم.

if (bluetoothAdapter.isEnabled()) {
Toast.makeText(this,”bluetooth is on”,Toast.LENGTH_LONG).show();
}else {
bluetoothAdapter.enable();
}

تابع ()isEnabled وضعیت فعال یا غیرفعال بودن بلوتوث را در قالب boolean به ما می دهد و تابع ()enable آن را روشن می کند.

خاموش کردن Bluetooth

در این مرحله هم باید همان بررسی قبل را انجام بدهیم و در صورت فعال بودن بلوتوث آن را با متد ()desable غیرفعال کنیم و در غیر این صورت آن را با پیام مناسب به کاربر اطلاع دهیم.

if (bluetoothAdapter.isEnabled()) {
bluetoothAdapter.disable();
}else {
Toast.makeText(this,”bluetooth is off”,Toast.LENGTH_LONG).show();
}

قابل رویت کردن Bluetooth

معمولا به صورت پیش فرض در دستگاه های اندرویدی زمانی که بلوتوث روشن می شود، توسط دستگاه های دیگر قابل شناسایی نیست. برای اینکه در برنامه خودمان این قابلیت را فعال کنیم باید مانند کد زیر یک Intent ارسال کنیم.

Intent visible_intent=new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
visible_intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300);
startActivityForResult(visible_intent,0);

خط دوم کد بالا مشخص کرده است که بلوتوث به مدت 300 ثانیه قابل شناسایی باشد. این مقدار به طور پیش فرض 120 ثانیه می باشد و اگر این خط را ننویسیم همین مقدار در نظر گرفته می شود.

دریافت لیست دستگاه های جفت شده

دکمه آخر برنامه ما قرار بود که نام تمامی دستگاه های جفت شده با این دستگاه را به ما نمایش دهد. برای این کار کد زیر را به متد ()onClick این دکمه اضافه می کنیم.

bluetoothDevices=bluetoothAdapter.getBondedDevices();
ArrayList<String>devices=new ArrayList<>();
for (BluetoothDevice b:bluetoothDevices){
devices.add(b.getName());
}
ArrayAdapter<String>adapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,devices);
listView.setAdapter(adapter);

متد ()getBondedDevices لیست تمامی دستگاه های جفت شده را در قالب <Set<BluetoothDevice برمی گرداند. هر BluetoothDevice یک نام دارد که با تابع ()getName می توانیم آن را به دست آوریم. در کد بالا ما آرایه ای از نام ها ایجاد کرده ایم و برای نمایش در listView یک Adapter ایجاد کرده ایم. اگر با این موضوع آشنایی ندارید می توانید در دوره مقدماتی برنامه نویسی اندروید ما ثبت نام کنید.

کد های برنامه

AndroidManifest.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
    package=”com.example.mybluetooth”>

    <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>

activity_main.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout
    xmlns:android=”http://schemas.android.com/apk/res/android”
    xmlns:tools=”http://schemas.android.com/tools”
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”
    android:orientation=”vertical”
    android:gravity=”center_horizontal”
    android:padding=”45dp”
    tools:context=”.MainActivity”>
    <Button
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:text=”turn on”
        android:onClick=”turnOnClick”
        android:layout_marginBottom=”20dp”/>
    <Button
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:text=”turn off”
        android:onClick=”turnOffClick”
        android:layout_marginBottom=”20dp”/>
    <Button
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:text=”set visible”
        android:onClick=”setVisibleClick”
        android:layout_marginBottom=”20dp”/>
    <Button
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:text=”devices list”
        android:onClick=”devicesListClick”
        android:layout_marginBottom=”20dp”/>

    <ListView
        android:id=”@+id/devicesList”
        android:layout_width=”match_parent”
        android:layout_height=”match_parent” />
</LinearLayout>

MainActivity.java

package com.example.mybluetooth;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Set;

public class MainActivity extends AppCompatActivity {

    BluetoothAdapter bluetoothAdapter;
    Set<BluetoothDevice>bluetoothDevices;
    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
        listView=findViewById(R.id.devicesList);
    }

    public void turnOnClick(View v){
        if (bluetoothAdapter.isEnabled()) {
            Toast.makeText(this,”bluetooth is on”,Toast.LENGTH_LONG).show();
        }else {
            bluetoothAdapter.enable();
        }
    }

    public void turnOffClick(View v){
        if (bluetoothAdapter.isEnabled()) {
            bluetoothAdapter.disable();
        }else {
            Toast.makeText(this,”bluetooth is off”,Toast.LENGTH_LONG).show();
        }
    }

    public void setVisibleClick(View v){
            Intent visible_intent=new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
            visible_intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300);
            startActivityForResult(visible_intent,0);
    }

    public void devicesListClick(View v){
        bluetoothDevices=bluetoothAdapter.getBondedDevices();
        ArrayList<String>devices=new ArrayList<>();
        for (BluetoothDevice b:bluetoothDevices){
            devices.add(b.getName());
        }
        ArrayAdapter<String>adapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,devices);
        listView.setAdapter(adapter);
    }
}

این آموزش هم به پایان رسید. لطفا نظرات، انتقادات و پیشنهادات خود را برای ما بنویسید. همچنین اگر سوالی راجب کار با بلوتوث دارید می توانید در قسمت نظرات بازگو کنید. ما در اسرع وقت پاسخ گوی شما خواهیم بود.

دیدگاه بگذارید

avatar
  Subscribe  
Notify of
آخرین محصولات