2013-03-09 14 views
27

मैं एक एक और उपकरण है जो मेरे फोन से जुड़ा के ब्लूटूथ सिग्नल की शक्ति प्राप्त करना चाहते हैं,ब्लूटूथ सिग्नल की शक्ति

मैं ब्लूटूथ सिग्नल की शक्ति कैसे प्राप्त कर सकते हैं जाओ?

मैंने Google पर बहुत कुछ खोजने की कोशिश की और मुझे कोई जवाब नहीं मिला।

क्या कोई जानता है कि मैं इसे कैसे कार्यान्वित कर सकता हूं?

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     registerReceiver(receiver, new IntentFilter(BluetoothDevice.ACTION_FOUND)); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    private final BroadcastReceiver receiver = new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context context, Intent intent) { 

      String action = intent.getAction(); 
      if(BluetoothDevice.ACTION_FOUND.equals(action)) { 
       int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE); 
       Toast.makeText(getApplicationContext()," RSSI: " + rssi + "dBm", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }; 

} 

मैं अपने मैनिफ़ेस्ट फ़ाइल में एक ब्लूटूथ की अनुमति है:

इस

myActivity है।

+1

http://stackoverflow.com/questions/3020407/how-to-find-signal-strength-of-connected-bluetooth-devices –

+1

मैंने इसे पहले ही देखा है, हालांकि सिग्नल को कैसे ढूंढें इसका कोई उदाहरण नहीं है ताकत .. क्या आप मेरी मदद कर सकते हैं? –

+0

मुझे लगता है कि आपका कोड ठीक है। टोस्ट को देखने के लिए आपको पहले डिस्कवर निष्पादित करने की आवश्यकता है। – Memochipan

उत्तर

26

सिग्नल प्राप्त करने के लिए आप ब्लूटूथ आरएसएसआई की जांच कर सकते हैं, आप आरएसएसआई को कनेक्टेड डिवाइस के लिए पढ़ सकते हैं, या किसी भी आस-पास के उपकरणों के लिए आरएसएसआई की जांच करने के लिए ब्लूटूथ खोज कर सकते हैं।

मूल रूप से एक ब्लूटूथ खोज वापस जवाब देने के लिए सभी स्टेशनों के लिए एक प्रसारण है। चूंकि प्रत्येक डिवाइस वापस प्रतिक्रिया देता है, एंड्रॉइड एक ACTION_FOUND मंशा को बंद कर देता है। इस इरादे के भीतर आप आरएसएसआई प्राप्त करने के लिए एक्स्ट्रा EXTRA_RSSI प्राप्त कर सकते हैं।

ध्यान दें कि सभी ब्लूटूथ हार्डवेयर आरएसएसआई का समर्थन नहीं करते हैं।

इसके अलावा संबंधित: Android IRC Office Hours Question About Android Bluetooth RSSI यहाँ उदाहरण

private final BroadcastReceiver receiver = new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     String action = intent.getAction(); 
     if(BluetoothDevice.ACTION_FOUND.equals(action)) { 
      int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE); 
      Toast.makeText(getApplicationContext()," RSSI: " + rssi + "dBm", Toast.LENGTH_SHORT).show(); 
     } 
    } 
}; 
+0

क्या आप मुझे एक उदाहरण दे सकते हैं, मैं आरएसएसआई का उपयोग कैसे कर सकता हूं और ब्लूटूथ की शक्ति से कैसे प्राप्त कर सकता हूं? –

+0

बहुत बहुत धन्यवाद, मैंने यह कोड लिखा, हालांकि जब मैंने डिवाइस के साथ जोड़ा तो यह मुझे सिग्नल की ताकत को टोस्ट में नहीं दिखाता है, क्या आपके पास दूसरा तरीका है?मैं अपनी गतिविधि को मुख्य थ्रेड –

+1

में भी जोड़ता हूं EXTRA_RSSI मान int परिवर्तन के बजाय एक छोटा प्रकार है और फिर – Arvind

23

मुझे लगता है कि अपने कोड ठीक है, लेकिन आप परिणाम जानने के लिए में startDiscovery() को लागू करने की जरूरत है।

सच यह है कि BluetoothDevice.EXTRA_RSSI केवल डिवाइसों की खोज के लिए काम करता है, जब आप उनमें से किसी एक से कनेक्ट होते हैं तो आप आरएसएसआई प्राप्त करने में सक्षम नहीं होते हैं।

यहां मैंने एक गतिविधि का एक बहुत ही सरल नमूना विकसित किया है जो आपको अपने आस-पास के उपकरणों के आरएसएसआई को देखने की अनुमति देता है। आपको सबसे पहले अपने लेआउट में एक टेक्स्ट व्यू और बटन जोड़ने की आवश्यकता है, फिर ब्लूटूथ एडाप्टर सक्षम करें और फिर बस बटन पर क्लिक करें।

package com.in2apps.rssi; 

import android.os.Bundle; 
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.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class RSSIActivity extends Activity { 

    private BluetoothAdapter BTAdapter = BluetoothAdapter.getDefaultAdapter(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_rssi); 
     registerReceiver(receiver, new IntentFilter(BluetoothDevice.ACTION_FOUND)); 

     Button boton = (Button) findViewById(R.id.button1); 
     boton.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v) { 
       BTAdapter.startDiscovery(); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_rssi, menu); 
     return true; 
    } 

    private final BroadcastReceiver receiver = new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context context, Intent intent) { 

      String action = intent.getAction(); 
      if(BluetoothDevice.ACTION_FOUND.equals(action)) { 
       int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE); 
       String name = intent.getStringExtra(BluetoothDevice.EXTRA_NAME); 
       TextView rssi_msg = (TextView) findViewById(R.id.textView1); 
       rssi_msg.setText(rssi_msg.getText() + name + " => " + rssi + "dBm\n"); 
      } 
     } 
    }; 
} 

यह इस तरह दिखता है:

RSSI Detection - Android Example

+0

क्या आप यह [प्रश्न] देख सकते हैं (http://stackoverflow.com/questions/31761416/connect-to-bluetooth-programmatically) कृपया? –

5

आवश्यक एपीआई एपीआई 18 (Android 4.3) में पेश किया गया था। अनुरोध शुरू करने के लिए आपको BluetoothGatt#readRemoteRssi() पर कॉल करने की आवश्यकता है। प्रतिक्रिया BluetoothCallback#onReadRemoteRssi() कॉलबैक पर दिखाई देती है। (वह कॉलबैक ऑब्जेक्ट है जो कनेक्ट, डिस्कवरी, विशेषता पढ़ता है, इत्यादि)

प्रसारण रिसीवर सामग्री अब आवश्यक नहीं है।

+0

मैं ब्लूटूथ क्लासिक सॉकेट कनेक्शन के साथ इसका उपयोग कैसे कर सकता हूं। – Herry

संबंधित मुद्दे