سبد (0)

کار با بلوتوث در اندروید

آموزش بلوتوث اندروید

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

اندروید Bluetooth API را ارائه می دهد تا این عملکردهای مختلف را اجرا کند .

1)      اسکن کردن دستگاه های بلوتوث دیگر

2)      ارائه ی لیستی از دستگاه های جفت شده

3)      اتصال به دیگر دستگاه ها از طریق سرویس یافته

اندروید کلاس BluetoothAdapter را فراهم می کند تا با بلوتوث ارتباط برقرار کرد. یک شئ از این کلاس را با فراخوانی روش استاتیک getDefaultAdapter(). ایجاد کنید. ترکیب آن به قرار زیر می باشد.

 

private BluetoothAdapter BA;
BA = BluetoothAdapter.getDefaultAdapter();

برای اینکه بلوتوث دستگاه خود را فعال کنید  ثابت بلوتوث ACTION_REQUEST_ENABLE   فرابخوانید. به صورت زیر:

 

Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(turnOn, 0);     

علاوه بر این ثابت، ثابت های دیگری وجود دارند که API را ارائه می دهند که فعالیت های متفاوتی را پشتیبانی می کند. این ثابت ها در زیر لیست شده اند.

  • ACTION_REQUEST_DISCOVERABLE

    این ثابت برای روشن کردن کشف بلوتوث استفاده می شود.
  • ACTION_STATE_CHANGED

    این ثابت هشدار خواهد داد که وضعیت بلوتوث تغییر کرده است.
  • ACTION_FOUND

    این ثابت برای دریافت اطلاعات در مورد دستگاه های کشف شده ی دیگر به کار می رود.

زمانی که بلوتوث را فعال می کنید می توانید لیستی از دستگاه های جفت شده را با فراخوانی روش getBondedDevices() داشته باشید. این روش مجموعه ای از دستگاه های بلوتوث را اعلام می کند. تبه صورت زیر:

 

private Set<BluetoothDevice>pairedDevices;
pairedDevices = BA.getBondedDevices();

علاوه بر دستگاه های جفت شده، روش های دیگری در API وجو دارند که کنترل بیشتری روی بلوتوث ارائه می دهند. این روش ها در زیر ارائه شده اند.

  • enable()

    این روش تعدیل کننده را اگر فعال نباشد، فعال می کند.
  • isEnabled()

    این روش درست است اگر تعدیل کننده فعال باشد.
  • disable()

    این روش تعدیل کننده را غیرفعال می کند.
  • getName()

    این روش نام تعدیل کننده ی بلوتوث را بازمی گرداند.
  • setName(String name)

    این روش نام بلوتوث را تغییر می دهد.
  • getState()

    این روش آخرین وضعیت تعدیل کننده ی بلوتوث را بازمی گرداند.
  • startDiscovery()

    این روش فرآیند جست و جوی بلوتوث را برای مدت 120 ثانیه شروع می کند.

این مثال توضیحاتی برای گروه BluetoothAdapter  ارائه می دهد تا بلوتوث را به کار گرفته و لیست دستگاه های جفت شده با بلوتوث را ارائه می دهد.

برای آزمایش با این مثال به یک دستگاه واقعی نیاز خواهید داشت.

  • برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان  AudioCapture تحت بسته ی com.example.audiocapture نام گذاری کنید. زمان ایجاد این برنامه مطمئن شوید که Target SDK و Compile With در آخرین ورژن Android SDK هستند تا از سطوح بالاتر API  استفاده کنید.
  • فایل src/MainActivity.java را برای افزودن کد تغییر دهید.
  • لی اوت فایل XML مربوط به res/layout/activity_main.xml را تغییر داده و اگر لازم است مولفه ی GUI به آن اضافه کنید.
  • فایل res/values/string.xml را تغییر داده و مولفه های رشته ی لازم را به آن اضافه کنید.
  • AndroidManifest.xml را تغییر دهید تا دستورات لازم را اضافه کنید.
  • برنامه را اجرا کنید و یک دستگاه اجرایی اندروید انتخاب کرده و برنامه را روی آن نصب کنید و نتایج را بررسی کنید.

در اینجا محتوای src/com.example.bluetooth/MainActivity.javaرا مشاهده می کنید.

 

package com.example.sairamkrishna.myapplication;
 
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
 
import android.graphics.Color;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
 
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
 
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
 
public class MainActivity extends Activity  {
   Button b1,b2,b3,b4;
   private BluetoothAdapter BA;
   private Set<BluetoothDevice>pairedDevices;
   ListView lv;
   
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      b1 = (Button) findViewById(R.id.button);
      b2=(Button)findViewById(R.id.button2);
      b3=(Button)findViewById(R.id.button3);
      b4=(Button)findViewById(R.id.button4);
      
      BA = BluetoothAdapter.getDefaultAdapter();
      lv = (ListView)findViewById(R.id.listView);
   }
   
   public void on(View v){
      if (!BA.isEnabled()) {
         Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
         startActivityForResult(turnOn, 0);
         Toast.makeText(getApplicationContext(),"Turned on",Toast.LENGTH_LONG).show();
      }
      else
      {
         Toast.makeText(getApplicationContext(),"Already on", Toast.LENGTH_LONG).show();
      }
   }
   
   public void off(View v){
      BA.disable();
      Toast.makeText(getApplicationContext(),"Turned off" ,Toast.LENGTH_LONG).show();
   }
   
   public  void visible(View v){
      Intent getVisible = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
      startActivityForResult(getVisible, 0);
   }
   
   public void list(View v){
      pairedDevices = BA.getBondedDevices();
      ArrayList list = new ArrayList();
      
      for(BluetoothDevice bt : pairedDevices)
      list.add(bt.getName());
      Toast.makeText(getApplicationContext(),"Showing Paired Devices",Toast.LENGTH_SHORT).show();
      
      final ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, list);
      lv.setAdapter(adapter);
   }
   
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
   }
   
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      // Handle action bar item clicks here. The action bar will
      // automatically handle clicks on the Home/Up button, so long
      // as you specify a parent activity in AndroidManifest.xml.
      
      int id = item.getItemId();
      
      //noinspection SimplifiableIfStatement
      if (id == R.id.action_settings) {
         return true;
      }
      return super.onOptionsItemSelected(item);
   }
}

در اینجا محتوای فایل activity_main.xmlرا مشاهده می کنید.

 

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin"
   tools:context=".MainActivity"
   android:transitionGroup="true">
   
   <TextView android:text="Bluetooth Example" android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textview"
      android:textSize="35dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView"
      android:layout_below="@+id/textview"
      android:layout_centerHorizontal="true"
      android:textColor="#ff7aff24"
      android:textSize="35dp" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:theme="@style/Base.TextAppearance.AppCompat" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Turn On"
      android:id="@+id/button"
      android:layout_below="@+id/imageView"
      android:layout_toStartOf="@+id/imageView"
      android:layout_toLeftOf="@+id/imageView"
      android:clickable="true"
      android:onClick="on" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Get visible"
      android:onClick="visible"
      android:id="@+id/button2"
      android:layout_alignBottom="@+id/button"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="List devices"
      android:onClick="list"
      android:id="@+id/button3"
      android:layout_below="@+id/imageView"
      android:layout_toRightOf="@+id/imageView"
      android:layout_toEndOf="@+id/imageView" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="turn off"
      android:onClick="off"
      android:id="@+id/button4"
      android:layout_below="@+id/button"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true" />
      
   <ListView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/listView"
      android:layout_alignParentBottom="true"
      android:layout_alignLeft="@+id/button"
      android:layout_alignStart="@+id/button"
      android:layout_below="@+id/textView2" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Paired devices:"
      android:id="@+id/textView2"
      android:textColor="#ff34ff06"
      android:textSize="25dp"
      android:layout_below="@+id/button4"
      android:layout_alignLeft="@+id/listView"
      android:layout_alignStart="@+id/listView" />
 
</RelativeLayout>

در اینجا محتوای فایل Strings.xml را مشاهده می کنید.


<resources>
   <string name="app_name">My Application</string>
   <string name="hello_world">Hello world!</string>
   <string name="action_settings">Settings</string>
</resources>

در اینجا محتوای AndroidManifest.xml  را مشاهده می کنید.

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >
   <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:theme="@style/AppTheme" >
      
      <activity
         android:name=".MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

اجازه بدهید برنامه ی AndroidCaptureشما را اجرا شود. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse، یکی ازفایل های فعالیت پروژه را باز کرده و روی آیکن Run  از تولبار کلیک کنید.

اکنون دکمه ی turn on را برای روشن کردن بلوتوث انتخاب کنید. اما به محض انتخاب آن، بلوتوث روشن نمی شود. در واقع اجازه ی شما را برای فعال شدن بلوتوث می پرسد.

حالا دکمه ی Get visible را انتخاب کنید تا قابلیت رویت شما روشن شود. صفحه ی زیر از شما اجازه می خواهد تا به مدت 120 ثانیه دستگاه قابل کشف باشد.

حال گزینه ی List Devices را انتخاب کنید. این گزینه لیست دستگاه های جفت شده را نشان می دهد.

در قسمت بعد دکمه ی Turn off را برای خاموش کردن بلوتوث انتخاب کنید که پیغام زیر ظاهر خواهد شد و نشان دهنده ی خاموش شدن موفقیت آمیز بلوتوث می باشد.

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه