registerReceiver(...)获得通过ClickListener [英] registerReceiver(...) getting passed 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屋!