簡體   English   中英

類擴展的BroadcastReceiver無法正常工作

[英]Class extending BroadcastReceiver not working

我制作了一個幫助程序類,該類擴展了BroadcastReceiver以偵聽找到的BluetoothDevice和發現完成的意圖。 我有兩個通過傳遞處理程序使用此類的活動。 處理程序根據意圖接收消息。 我實例化類和registerReceiver像這樣:

來自mainActivity

deviceHelper=new DevicesHelper(myHandler,DevicesHelper.REQUEST_DETECT_DEVICES_IN_RANGE);

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
this.registerReceiver(deviceHelper, filter);

filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
this.registerReceiver(deviceHelper, filter);

if(myBluetoothAdapter.isDiscovering())myBluetoothAdapter.cancelDiscovery();
myBluetoothAdapter.startDiscovery(); 

從ListActivity

deviceHelper=new DevicesHelper(deviceListHandler,DevicesHelper.REQUEST_DEVICE_LIST_ACTIVITY);

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
this.registerReceiver(deviceHelper, filter);

filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
this.registerReceiver(deviceHelper, filter);

DeviceHelper類

public class DevicesHelper extends BroadcastReceiver {

    public final static int REQUEST_DEVICE_LIST_ACTIVITY=1;
    public final static int REQUEST_DETECT_DEVICES_IN_RANGE=2;


    Handler myHandler;      
    int requestCode;

    public DevicesHelper(){

    }
    public DevicesHelper(Handler handler,int requestCode){
            this.requestCode=requestCode;
            myHandler=handler;

    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        String action = intent.getAction();

        // When discovery finds a device
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // Get the BluetoothDevice object from the Intent
            switch(requestCode){
            case REQUEST_DEVICE_LIST_ACTIVITY: 
                if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
                    //newDevicesCount++;
                    String[] deviceInfo={device.getName(),device.getAddress()};

                    myHandler.obtainMessage(DeviceListActivity.MESSAGE_NEW_DEVICE,deviceInfo);
                };


                break;

            case REQUEST_DETECT_DEVICES_IN_RANGE:

                String[] deviceInfo={device.getName(),device.getAddress()};

                myHandler.obtainMessage(StripChartRecorder.MESSAGE_NEW_DEVICE,deviceInfo);
                break;

            }


            // When discovery is finished, change the Activity title
        } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {

            myHandler.obtainMessage(StripChartRecorder.MESSAGE_DISCOVERY_FINISHED);

        }
    }

處理程序

private final Handler myHandler=new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch(msg.what) {
                case MESSAGE_NEW_DEVICE:
                    doOtherStuff();

                case MESSAGE_DISCOVERY_FINISHED:
                    dostuff();
            }
            break;
}}

我在這里想念什么嗎? 感謝您的幫助。

您需要sendMessage(Message msg) ,其中msg是通過obtainMessage獲得的Message

問題是我如何處理從處理程序收到的消息。 結果表明,根據eclipse的說明,Set <>最初被設置為null,因此它從未添加從BroadcastReceiver幫助器類接收的設備。 感謝任何嘗試提供幫助的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM