Android प्रसारण रिसीवर ब्लूटूथ घटनाओं को पकड़ने




bluetooth android-broadcast (2)

आपकी मुख्य समस्या;) आप स्ट्रिंग तुलना के लिए "स्विच" का उपयोग नहीं कर सकते।

कम से कम VERSION_INT 18 (समावेशी) तक नहीं। संस्करण 19 की शुरुआत जावा 7 से हुई।

मैं ब्रॉडकास्ट रिसीवर के साथ ब्लूटूथ स्थिति परिवर्तन को पकड़ने की कोशिश कर रहा हूं।

मेरा प्रकटन:

<uses-permission android:name="android.permission.BLUETOOTH" />
<application>
     <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>

    <receiver android:name=".BluetoothBroadcastReceiver"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
            <action android:name="android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED" />
            <action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
            <action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
        </intent-filter>
    </receiver>
</application>

प्राप्तकर्तासक्रिय विधि:

public void onReceive(Context context, Intent intent) {

    String action = intent.getAction();
    Log.d("BroadcastActions", "Action "+action+"received");
    int state;
    BluetoothDevice bluetoothDevice;

    switch(action)
    {
        case BluetoothAdapter.ACTION_STATE_CHANGED:
            state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1);
            if (state == BluetoothAdapter.STATE_OFF)
            {
                Toast.makeText(context, "Bluetooth is off", Toast.LENGTH_SHORT).show();
                Log.d("BroadcastActions", "Bluetooth is off");
            }
            else if (state == BluetoothAdapter.STATE_TURNING_OFF)
            {
                Toast.makeText(context, "Bluetooth is turning off", Toast.LENGTH_SHORT).show();
                Log.d("BroadcastActions", "Bluetooth is turning off");
            }
            else if(state == BluetoothAdapter.STATE_ON)
            {
                Log.d("BroadcastActions", "Bluetooth is on");
            }
            break;

        case BluetoothDevice.ACTION_ACL_CONNECTED:
            bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            Toast.makeText(context, "Connected to "+bluetoothDevice.getName(),
                    Toast.LENGTH_SHORT).show();
            Log.d("BroadcastActions", "Connected to "+bluetoothDevice.getName());
            break;

        case BluetoothDevice.ACTION_ACL_DISCONNECTED:
            bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            Toast.makeText(context, "Disconnected from "+bluetoothDevice.getName(),
                    Toast.LENGTH_SHORT).show();
            break;
    }
}

मैंने ऐप लॉन्च किया फिर होम बटन दबाकर इसे कम से कम करें। सेटिंग्स पर जाएं और ब्लूटूथ चालू करें लेकिन कुछ भी नहीं होता है। हालाँकि मुझे टोस्ट और लॉगकट संदेशों की उम्मीद है। यहाँ क्या गलत है?


ब्लूटूथ स्थिति परिवर्तन ( STATE_OFF , STATE_TURNING_ON , STATE_ON , STATE_TURNING_OFF ) को पकड़ने के लिए, अपनी गतिविधि में यह करें:

सबसे पहले, अपने AndroidManifest फ़ाइल में ब्लूटूथ की अनुमति जोड़ें:

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

अपनी गतिविधि या सेवा में एक ब्रॉडकास्टरेवर बनाएँ:

    private final BroadcastReceiver mBroadcastReceiver1 = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();

        if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
            final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
            switch(state) {
                case BluetoothAdapter.STATE_OFF:
                    ..
                    break;
                case BluetoothAdapter.STATE_TURNING_OFF:
                    ..
                    break;
                case BluetoothAdapter.STATE_ON:
                    ..
                    break;
                case BluetoothAdapter.STATE_TURNING_ON:
                    ..
                    break;
            }

        }
    }
};

एक IntentFilter बनाएं और इसे अपने ऑन-क्रेट onCreate() विधि में गतिविधि / सेवा के लिए BroadcastReceiver के साथ पंजीकृत करें:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    IntentFilter filter1 = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
    registerReceiver(mBroadcastReceiver1, filter1);

    ...
}

अपने onDestroy() विधि में Unregister BroadcastReceiver:

@Override
protected void onDestroy() {
    super.onDestroy();

    unregisterReceiver(mBroadcastReceiver1);
}

डिवाइस की SCAN_MODE_NONE परिवर्तन ( SCAN_MODE_NONE , SCAN_MODE_CONNECTABLE , SCAN_MODE_CONNECTABLE_DISCOVERABLE ) को पकड़ने के लिए, एक और ब्रॉडकास्टसेवर बनाएं और जैसा कि मैंने ऊपर बताया है, अपनी गतिविधि को पंजीकृत / अपंजीकृत करें। केवल उन ब्रॉडकास्टरों के बीच का अंतर केवल पहले एक का उपयोग करता है BluetoothAdapter.EXTRA_STATE और दूसरा का उपयोग करता है BluetoothAdapter.EXTRA_SCAN_MODE । खोज के परिवर्तन को पकड़ने के लिए यहां ब्रॉडकास्टर के लिए उदाहरण कोड दिया गया है:

फ़िल्टर बनाएं और इसे onCreate() विधि में पंजीकृत करें:

IntentFilter filter2 = new IntentFilter();
filter2.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
filter2.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
filter2.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
registerReceiver(mBroadcastReceiver2, filter2);

खोज परिवर्तन को पकड़ने के लिए गतिविधि / सेवा में ब्रॉडकास्टरेवर बनाएँ:

    private final BroadcastReceiver mBroadcastReceiver2 = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();

        if(action.equals(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED)) {

            int mode = intent.getIntExtra(BluetoothAdapter.EXTRA_SCAN_MODE, BluetoothAdapter.ERROR);

            switch(mode){
                case BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE:
                    ..
                    break;
                case BluetoothAdapter.SCAN_MODE_CONNECTABLE:
                    ..
                    break;
                case BluetoothAdapter.SCAN_MODE_NONE:
                    ..
                    break;
            }
        }
    }
};

और अंत में इसे onDestroy() में अपंजीकृत करें:

unregisterReceiver(mBroadcastReceiver2);

ध्यान दें, आपको अपने AndroidManifest फ़ाइल में किसी भी <intent-filter> या <receiver> को जोड़ने की आवश्यकता नहीं है, सिवाय इसके कि आपको निश्चित रूप से ब्लूटूथ अनुमति जोड़ने की आवश्यकता है।

यदि आप ( ACTION_ACL_CONNECTED , ACTION_ACL_DISCONNECTED , ACTION_ACL_DISCONNECT_REQUESTED ) को पकड़ना चाहते हैं, तो अब आपको अपनी AndroidManifest फ़ाइल में <intent-filter> जोड़ने की आवश्यकता है:

<intent-filter>
    <action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
    <action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
</intent-filter>

फ़िल्टर बनाएं और इसे onCreate() विधि में पंजीकृत करें:

IntentFilter filter3 = new IntentFilter();
filter3.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
filter3.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
registerReceiver(mBroadcastReceiver3, filter3);

फिर अपनी गतिविधि / सेवा में ब्रॉडकास्टरेवर बनाएँ:

    private final BroadcastReceiver mBroadcastReceiver3 = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        switch (action){
            case BluetoothDevice.ACTION_ACL_CONNECTED:
                ..
                break;
            case BluetoothDevice.ACTION_ACL_DISCONNECTED:
                ..
                break;
        }
    }
};

और अंत में, अपंजीकृत करें:

unregisterReceiver(mBroadcastReceiver3);

यदि आप राज्य स्थिरांक के बारे में अधिक पढ़ना चाहते हैं, तो यह प्रलेखन से है:

सार्वजनिक स्थैतिक अंतिम स्ट्रिंग EXTRA_STATE :

वर्तमान बिजली स्थिति का अनुरोध करने के लिए ACTION_STATE_CHANGED इरादों में एक अतिरिक्त अतिरिक्त क्षेत्र के रूप में उपयोग किया जाता है। संभावित मान हैं: STATE_OFF, STATE_TURNING_ON, STATE_ON, STATE_TURNING_OFF

सार्वजनिक स्थिर अंतिम स्ट्रिंग EXTRA_SCAN_MODE :

वर्तमान स्कैन मोड का अनुरोध करने के लिए ACTION_SCAN_MODE_CHANGED इरादों में एक अतिरिक्त अतिरिक्त क्षेत्र के रूप में उपयोग किया जाता है। संभावित मान हैं: SCAN_MODE_NONE, SCAN_MODE_CONNECTABLE, SCAN_MODE_CONNECTABLE_DISCOVERABLE





android-bluetooth