registerReceiver(...)获得通过ClickListener [英] registerReceiver(...) getting passed ClickListener

查看:310
本文介绍了registerReceiver(...)获得通过ClickListener的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些困难,传递正确的信息来建立Bluetooth发现和配对。我一直在密切关注Android开发示例文档pretty而一直没能找出我需要传递给此方法。这是网站,我一直在使用,以供参考。

http://developer.android.com/guide/topics/connectivity/ bluetooth.html

TransferFragment:

  //一些$ C $从用c
// HTTP://examples.java$c$cgeeks.com/android/core/ui/progressdialog/android-progressdialog-example/
// http://developer.android.com/guide/topics/connectivity/bluetooth.html包com.project.BluetoothTransfer_v1000;进口java.util.Set中;进口android.app.AlertDialog;
进口android.app.ProgressDialog;
进口android.bluetooth.BluetoothAdapter;
进口android.bluetooth.BluetoothDevice;
进口android.content.BroadcastReceiver;
进口android.content.Context;
进口android.content.DialogInterface;
进口android.content.Intent;
进口android.content.IntentFilter;
进口android.os.Bundle;
进口android.os.Handler;
进口android.support.v4.app.Fragment;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.ArrayAdapter;
进口android.widget.Button;
进口android.widget.ImageView;
进口android.widget.TextView;
进口android.widget.Toast;公共类TransferFragment扩展片段{    私人TextView的filePathTextView;
    私人按钮startTransferButton;
    私人ImageView的bluetoothImage;
    ProgressDialog transferDialog;
    处理器updateBarHandler;
    私有静态最终诠释REQUEST_BLUETOOTH = 1;
    私有静态最终诠释DISCOVER_DURATION = 300;
    上下文语境;
    ArrayAdapter mArrayAdapter;    @覆盖
    公共查看onCreateView(LayoutInflater吹气,ViewGroup中的父母,最后捆绑savedInstanceState){        super.onCreate(savedInstanceState);        //设置用户界面布局为这项活动
        setRetainInstance(假);
        视图V = inflater.inflate(R.layout.activity_bluetooth_transfer,父母,假);        上下文= this.getActivity();
        filePathTextView =(TextView中)v.findViewById(R.id.file_path_textView);
        startTransferButton =(按钮)v.findViewById(R.id.start_transfer_button);
        bluetoothImage =(ImageView的)v.findViewById(R.id.bluetooth_imageView);
        bluetoothImage.setClickable(真);        startTransferButton.setOnClickListener(新View.OnClickListener(){
            //启动转移过程
            @燮pressWarnings(未登记)
            @覆盖
            公共无效的onClick(视图v){
                //检查以确保文件路径文本视图!= NULL
                BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
                INT REQUEST_ENABLE_BT = -1;
                //确保所使用的设备具有蓝牙能力
                如果(btAdapter!= NULL){
                    //检查启用蓝牙
                    如果(!btAdapter.isEnabled()){
                        意图enableBtIntent =新意图(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                        startActivityForResult(enableBtIntent,REQUEST_ENABLE_BT);
                        }
                    //保证的TextView不为空
                    //检查文件路径为空
                    如果(filePathTextView.getText()。的toString()。长度()!= 0){
                        SET<&BluetoothDevice类GT; pairedDevices = btAdapter.getBondedDevices();
                        //检查是否有配对设备
                        如果(pairedDevices.size()大于0){
                            //通过配对设备循环
                            对于(BluetoothDevice类设备:pairedDevices){
                                //添加名称和地址到一个数组适配器在ListView显示
                                mArrayAdapter.add(device.getName()+\\ n+ device.getAddress());
                            }
                        } //最终找到配对的设备,如果                        //创建ACTION_FOUND一个BroadcastReceiver
                        最终的BroadcastReceiver mReceiver =新的广播接收器(){
                            公共无效的onReceive(上下文的背景下,意图意图){
                                字符串行动= intent.getAction();
                                //当发现找到的设备
                                如果(BluetoothDevice.ACTION_FOUND.equals(动作)){
                                    //从意向获取BluetoothDevice类对象
                                    BluetoothDevice类设备= intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                                    //添加名称和地址到一个数组适配器在ListView显示
                                    mArrayAdapter.add(device.getName()+\\ n+ device.getAddress());
                                }
                            }
                        };
                        //注册的BroadcastReceiver
                        IntentFilter的过滤器=新的IntentFilter(BluetoothDevice.ACTION_FOUND);                        //编译器错误BELOW @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@
                        //这种方法registerReceiver(广播接收器,IntentFilter的)
                        //未定义类型新View.OnClickListener
                        registerReceiver(mReceiver,过滤器);                        意向discoverableIntent =新
                        意图(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
                        discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300);
                        startActivity(discoverableIntent);
                        btAdapter.cancelDiscovery();
                    } //
                    其他{
                        //警告用户输入文件路径
                        新AlertDialog.Builder(上下文).setTitle(错误)
                        .setMessage(请插入文件名派。)
                        .setPositiveButton(OK,新DialogInterface.OnClickListener(){
                            @覆盖
                            公共无效的onClick(DialogInterface对话,诠释它){}
                        })。显示();
                    } // IFNULL(否则)
                } // BT装备检查
            } //结束不久类
        });        bluetoothImage.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){
                //显示对话框显示程序规范和创造者
                新AlertDialog.Builder(上下文).setTitle(关于)
                .setMessage(创建者:+\\ n+哈尔,克里斯,和罗杰)
                .setPositiveButton(真棒!,新DialogInterface.OnClickListener(){
                    @覆盖
                    公共无效的onClick(DialogInterface对话,诠释它){
                    }
                })。显示();
            }
        });
        返回伏;
    }
}

TransferActivity:

 包com.project.BluetoothTransfer_v1000;进口android.os.Bundle;
进口android.support.v4.app.FragmentActivity;
进口android.support.v4.app.FragmentManager;
进口android.support.v4.app.FragmentTransaction;公共类TransferActivity扩展FragmentActivity {    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_transfer);
        TransferFragment片段=新TransferFragment();
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.container,片段);
        fragmentTransaction.commit();
    }
}


解决方案

尝试:

  TransferFragment.this.getActivity()registerReceiver(mReceiver,过滤器)。

而不是:

  registerReceiver(mReceiver,过滤器);

由于该方法 registerReceiver 是活动的一部分,而不是OnClickListener。这就是为什么错误信息抱怨找不到方法OnClickListener:


  

此方法registerReceiver(广播接收器,IntentFilter的)
  是未定义类型新View.OnClickListener


I am having some difficulty passing the right information to set up Bluetooth discovery and pairing. I have been following the Android developer example documents pretty closely and have not been able to figure out what I need to pass to this method. This is the site I have been using, for reference.

http://developer.android.com/guide/topics/connectivity/bluetooth.html

TransferFragment:

//some code used from 
//   http://examples.javacodegeeks.com/android/core/ui/progressdialog/android-progressdialog-example/
//   http://developer.android.com/guide/topics/connectivity/bluetooth.html

package com.project.BluetoothTransfer_v1000;

import java.util.Set;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class TransferFragment extends Fragment{

    private TextView filePathTextView;
    private Button startTransferButton;
    private ImageView bluetoothImage;
    ProgressDialog transferDialog;
    Handler updateBarHandler;
    private static final int REQUEST_BLUETOOTH = 1;
    private static final int DISCOVER_DURATION = 300;
    Context context;
    ArrayAdapter mArrayAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, final Bundle savedInstanceState){

        super.onCreate(savedInstanceState);

        //set the user interface layout for this activity
        setRetainInstance(false);
        View v = inflater.inflate(R.layout.activity_bluetooth_transfer, parent, false);

        context = this.getActivity();
        filePathTextView = (TextView) v.findViewById(R.id.file_path_textView);
        startTransferButton = (Button) v.findViewById(R.id.start_transfer_button);
        bluetoothImage = (ImageView) v.findViewById(R.id.bluetooth_imageView);
        bluetoothImage.setClickable(true);

        startTransferButton.setOnClickListener(new View.OnClickListener() {
            //start transfer processes
            @SuppressWarnings("unchecked")
            @Override
            public void onClick(View v){
                //check to make sure the file path text view != null
                BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
                int REQUEST_ENABLE_BT = -1;
                //ensure the device being used has bluetooth capability
                if (btAdapter != null){
                    //check-enable bluetooth
                    if (!btAdapter.isEnabled()) {
                        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
                        }
                    //ensure the textview isn't empty
                    //check if filepath is null
                    if (filePathTextView.getText().toString().length() != 0){
                        Set<BluetoothDevice> pairedDevices = btAdapter.getBondedDevices();
                        //check if there are paired devices
                        if (pairedDevices.size() > 0){
                            //loop through paired devices
                            for (BluetoothDevice device: pairedDevices){
                                //add the name and address to an array adapter to show in a ListView
                                mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
                            }                   
                        }//end found paired devices if

                        // Create a BroadcastReceiver for ACTION_FOUND
                        final BroadcastReceiver mReceiver = new BroadcastReceiver() {
                            public void onReceive(Context context, Intent intent) {
                                String action = intent.getAction();
                                // When discovery finds a device
                                if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                                    // Get the BluetoothDevice object from the Intent
                                    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                                    // Add the name and address to an array adapter to show in a ListView
                                    mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
                                }
                            }
                        };
                        // Register the BroadcastReceiver
                        IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);

                        //COMPILER ERROR BELOW @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                        //"This method registerReceiver(BroadcastReceiver, IntentFilter)
                        //is undefined for type new View.OnClickListener
                        registerReceiver(mReceiver, filter); 

                        Intent discoverableIntent = new
                        Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
                        discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
                        startActivity(discoverableIntent);
                        btAdapter.cancelDiscovery();
                    }//
                    else {
                        //alert user to input file path
                        new AlertDialog.Builder(context).setTitle("Error")
                        .setMessage("Please insert a filename to send.")
                        .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {}
                        }).show();
                    }//ifnull (else)
                }//bt equipped check
            }//end anon class
        });

        bluetoothImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //display dialog showing program specs and creators
                new AlertDialog.Builder(context).setTitle("About")
                .setMessage("Created by:"+"\n"+ "Hal, Chris, and Roger")
                .setPositiveButton("Awesome!", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                }).show();
            }
        });
        return v;
    }
}

TransferActivity:

package com.project.BluetoothTransfer_v1000;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

public class TransferActivity extends FragmentActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transfer);
        TransferFragment fragment = new TransferFragment();
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.container, fragment);
        fragmentTransaction.commit();
    }
}

解决方案

Try:

TransferFragment.this.getActivity().registerReceiver(mReceiver, filter); 

Instead of:

registerReceiver(mReceiver, filter); 

Because the method registerReceiver is part of the Activity and not the OnClickListener. This is why the error message complains about not found method in OnClickListener:

This method registerReceiver(BroadcastReceiver, IntentFilter) is undefined for type new View.OnClickListener

这篇关于registerReceiver(...)获得通过ClickListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆