Android获取蓝牙设备的信息

Android手机连接上蓝牙设备,如蓝牙音箱或者蓝牙耳机,能否获得该设备的电量以及制造商等,有什么方法吗

2个回答

蓝牙设备向android发送 AT 命令 里面有厂商信息 或者是蓝牙电量的交互

android手机实现显示蓝牙耳机电量的需求

http://bbs.csdn.net/topics/390248574

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android获取已连接的蓝牙设备
Android手机连接蓝牙设备后,不能通过搜索再次搜到,网上各种方法试了均无效,反射机制也用了没啥用,哪位大神可以帮忙
android安卓9.0怎么样获取蓝牙信息,让手机蓝牙可以周期性发送包含蓝牙mac地址广播包
android安卓9.0怎么样获取蓝牙信息,让手机变成一个可以周期性发送包含蓝牙mac地址广播包的设备? 加我微信18103869818,解决这个问题的,必有重谢,具体私聊
Android 蓝牙4.0 如何连接多个设备。获取到BluetoothGatt后却只能连接一个设备
Android 蓝牙4.0 如何连接多个设备。获取到BluetoothGatt后却只能连接一个设备,我尝试建立多个连接把得到的BluetoothGatt放到集合中,然后获取服务,还是控制不了多个。 求给个思路,或者简单的例子。
关于Android蓝牙开发rssi连续获取
在蓝牙开发的获取rssi的过程中,我也搜索了很多办法。无非是两个:一个是利用bluetoothgatt来实现蓝牙设备连接时调用getBluetoothrssi来获取,还有一个是在广播处发现蓝牙设备时可以获取rssi。但是对于持续获取的问题依然没有得到解决,对于一个设备的连续获取。我也想过这个办法,不断的开始和暂停搜索,来不断调用广播获取rssi。但是,有这样一个问题,因为我是重新开的一个线程,需要不断不停,很快的获取rssi,而蓝牙搜索是需要时间的,可能很快就能发现,也可能需要一点时间,这个和距离应该有关吧。所以就无法统一线程和广播的时间。所以来问一下各位,还有其他更好的办法么?
Android 蓝牙通信问题
安卓开发萌新。在做一个蓝牙通信的APP,现在打开蓝牙可以搜索到周围一开启蓝牙的设备,点击连接后,也会出现配对的窗口,但软件会出现闪退,不知是何问题。以下是源代码,希望各路大佬可以帮我解决一下这个问题,是否是线程未开启呢。是否是因为我已经设置与单片机通信的UUID的问题。 ``` package com.windfire; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.UUID; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class WindFireDemoActivity extends Activity implements OnClickListener { /** Called when the activity is first created. */ /*建立蓝牙适配器,搜索可连接设备,进行配对,*/ public static final int RECV_VIEW = 0; private BluetoothAdapter mBluetoothAdapter;//蓝牙适配器 private ArrayAdapter<String> deviceAdapter;//设备显示列表适配器 private ConnectThread connectthread; private List<String> listDevices; private ListView text;//显示需要配对设备 private Button parameterinput;//参数录入 private Button teststart;//开始测试 private Button search;//寻找设备按钮 private Button send;//发送按钮 private TextView datatest; private boolean sendflag = false; private final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");//蓝牙串口服务 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(android.R.style.Theme_Black_NoTitleBar); setContentView(R.layout.main); initview();//实例化 initBroadcast();//初始化广播 mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//获取本地蓝牙适配器,初始化蓝牙 //是否支持蓝牙功能 if(mBluetoothAdapter == null) { Toast.makeText(WindFireDemoActivity.this, "所持设备不支持蓝牙", Toast.LENGTH_SHORT).show(); } } /************************定义广播接收,查找设备,检查配对信息,添加到listDevices中*************************/ private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction();//服务发现远程设备时 String str = ""; if(BluetoothDevice.ACTION_FOUND.equals(action))//每扫描到一个设备,系统都会发送此广播 { //从Intent中获取device信息 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);//获取搜索到的设备信息 str = device.getName()+ ":" + device.getAddress() + "\n"; //当发现的新设备不存在于设备配对列表中时,将设备的名字和地址添加到ArrayAdapter中 if(listDevices.indexOf(str) == -1)//防止重复添加 { listDevices.add(str);//添加搜索到的设备信息 deviceAdapter.notifyDataSetChanged(); } } else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { Toast.makeText(WindFireDemoActivity.this, "Discovery finished", Toast.LENGTH_SHORT).show(); } } }; /**************************************UI实例化*************************************************/ public void initview() { parameterinput =(Button)findViewById(R.id.input); teststart =(Button)findViewById(R.id.start); search =(Button)findViewById(R.id.button); send =(Button)findViewById(R.id.send); text = (ListView)findViewById(R.id.listView1); datatest = (TextView)findViewById(R.id.datatest); parameterinput.setOnClickListener(this); teststart.setOnClickListener(this); search.setOnClickListener(this); send.setOnClickListener(this); listDevices = new ArrayList<String>(); deviceAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listDevices);//列表显示listDevices的设备名称及mac text.setAdapter(deviceAdapter); text.setOnItemClickListener( new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> adapterview, View view, int position,long id) { // TODO Auto-generated method stub //绑定所选择的蓝牙MAC地址设备 String str = deviceAdapter.getItem(position); if(null == str) { Toast.makeText(getApplicationContext(), "未选中设备", Toast.LENGTH_SHORT).show(); } String mac = str.substring(str.indexOf(":")+1).trim(); BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(mac);//以mac去创建一个device connectthread = new ConnectThread(device); connectthread.start(); Toast.makeText(getApplicationContext(), "连接到所选设备", Toast.LENGTH_SHORT).show(); } }); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()) { case R.id.input: Intent intent1 = new Intent(WindFireDemoActivity.this,parametershow.class); startActivity(intent1); break; case R.id.start: Intent intent2 = new Intent(WindFireDemoActivity.this,datashow.class); startActivity(intent2); break; case R.id.button: if(!mBluetoothAdapter.isEnabled()) { Intent enabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivity(enabler);//开启蓝牙 if (mBluetoothAdapter.isEnabled())//设置可见 { if (mBluetoothAdapter.getScanMode()!=BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) { Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 200); startActivity(discoverableIntent); } } } if (mBluetoothAdapter.isDiscovering()) { mBluetoothAdapter.cancelDiscovery(); Toast.makeText(getApplicationContext(), "Exit Discovery", Toast.LENGTH_SHORT).show(); } else//搜索未开始 { mBluetoothAdapter.startDiscovery();//开始搜索 Toast.makeText(getApplicationContext(), "Start Discovery", Toast.LENGTH_SHORT).show(); } break; case R.id.send: if(connectthread != null)//连接建立完成,准备发送指令开始通信 { try { sendflag = true; String str = "0x33"; connectthread.write(getHexBytes(str)); datatest.setText("send success"); } catch(Exception e) { e.printStackTrace(); } } else { Toast.makeText(WindFireDemoActivity.this, "未连接蓝牙设备", Toast.LENGTH_SHORT).show(); } break; } } /**************************************Broadcast初始化*************************************************/ public void initBroadcast(){ IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothDevice.ACTION_FOUND); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); registerReceiver(mReceiver,filter); } /**************************************连接线程*************************************************/ public class ConnectThread extends Thread { private BluetoothSocket btSocket; private InputStream in; private OutputStream out; //private BluetoothDevice btDev; public ConnectThread (BluetoothDevice device) { try { btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); } catch(IOException e) { e.printStackTrace(); } } public void run() { //发现服务会减慢连接建立速度,因此关闭掉 if(mBluetoothAdapter.isDiscovering()) { mBluetoothAdapter.cancelDiscovery(); }//退出搜索 try { //请求连接,该操作会阻塞线程 btSocket.connect(); Toast.makeText(WindFireDemoActivity.this, "连接建立", Toast.LENGTH_SHORT).show(); in = btSocket.getInputStream(); out = btSocket.getOutputStream(); if(sendflag) { new Thread(new Runnable(){ @Override public void run(){ byte[] buffer = new byte[1024]; int bytes; try{ while((bytes = in.read(buffer)) != -1) { String str = new String(buffer,"UTF-8"); str = str.substring(0, bytes); if(str.endsWith(" ")) { datatest.append(str); continue; } Bundle bundle = new Bundle(); Message message = new Message(); bundle.putString("recv", datatest.toString()); message.what = RECV_VIEW; message.setData(bundle); handler.sendMessage(message); } } catch(IOException e) { e.printStackTrace(); } } }).start(); } } catch(IOException e){ try{ btSocket.close(); } catch(IOException e1){ e1.printStackTrace(); } e.printStackTrace(); } } public void write(byte[] bytes) { try { out.write(bytes); } catch(IOException e) { e.printStackTrace(); } } public void cancel() { try { btSocket.close(); } catch (IOException e) { } } } /******************************************Handler处理message*************************************/ private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { Bundle bundle = null; switch(msg.what) { case RECV_VIEW: bundle = msg.getData(); String recv = bundle.getString("recv"); datatest.append(recv+"\n"); break; default: Toast.makeText(getApplicationContext(), "接受信息失败", Toast.LENGTH_SHORT).show(); /*case NOTICE_VIEW: bundle = msg.getData(); String notice = bundle.getString("notice"); datatest.append(notice);*/ break; } } }; public byte[] getHexBytes(String message) { int len = message.length() / 2; char[] chars = message.toCharArray(); String[] hexStr = new String[len]; byte[] bytes = new byte[len]; for (int i = 0, j = 0; j < len; i += 2, j++) { hexStr[j] = "" + chars[i] + chars[i + 1]; bytes[j] = (byte) Integer.parseInt(hexStr[j], 16); } return bytes; } @Override protected void onDestroy() { unregisterReceiver(mReceiver); super.onDestroy(); } } ``` 希望尽快解答
安卓连接多个蓝牙设备
Android 蓝牙4.0 需要连接多个设备。获取到BluetoothGatt后却只能连接一个设备
求大神指导,实时获取蓝牙断开连接状态的方法?
做一个和4.0蓝牙设备通信的安卓app. 要求能实时的显示蓝牙的状态,连接时显示连接好做. 但是测试的时候发现,主动关闭蓝牙设备后,手机端大概要10s左右的时间才会收到断开连接的回调 而且时间不固定,不确定是什么机制在不定时的判断连接是否断开. 做蓝牙的哥们说,蓝牙有一个监督超时时间可以设置,但我翻文档发现没有对应的api. 现在总是不能实时的获取断开状态.很苦恼,求大神指导.
android 蓝牙MAC地址 bluetooth_address
在android 设备中 用 adb shell settings get secure bluetooth_address 命令 获取到的不是真正的蓝牙MAC地址 怎么办?? 在settings_secure.xml 中bluetooth_address也是这个假的地址 求助!!
android 同时连接蓝牙和耳机,怎样获取当前播放音频的设备
如题,当设备同时连接蓝牙和耳塞,有什么办法可以确定声音是从哪个设备出来的?
Android蓝牙怎么获取“可用用户”的RSSI?
**两部手机开启蓝牙,只“搜索”而不“匹配”,可以获得RSSI吗? 我试过官方demo,但是根本搜索不到任何手机(两部手机是没问题的,可以匹配的到),也搜不到粗粮手环。 我想获取RSSI来计算大概距离。** **另外下面这些网上搜到的代码我试过了也没用** /*------------------------------------------------------------------------------*/ > 要拿到蓝牙信号指示值 rssi 分为两个步骤。 > 1.在oncreate方法里面增加 注册扫描广播 > public void onCreate(Bundle savedInstanceState) { > > // 注册开始发现广播。 > IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED); > this.registerReceiver(mReceiver, filter); > > } > 2.新建BroadcastReceiver广播对象,并实现里面的onreceive方法,在onreceive得到rssi(信号强度)。 > private final BroadcastReceiver mReceiver = new BroadcastReceiver() { > @Override > public void onReceive(Context context, Intent intent) { > String action = intent.getAction(); > > //当设备开始扫描时。 > if (BluetoothDevice.ACTION_FOUND.equals(action)) { > //从Intent得到blueDevice对象 > BluetoothDevice device = intent > .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); > > if (device.getBondState() != BluetoothDevice.BOND_BONDED) { > > //信号强度。 > short rssi = intent.getExtras().getShort( > BluetoothDevice.EXTRA_RSSI); > > } > > } > } > }; > >
Android 关于蓝牙的app打开闪退 显示NullPointerException
我把中间的部分省略了,应该是onResume()那里出了问题,请问应该如何解决 ![图片说明](https://img-ask.csdn.net/upload/201608/12/1470975352_92854.jpg) ``` import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.UUID; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.view.Display; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.Window; import android.view.ViewGroup.MarginLayoutParams; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.Button; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import android.widget.Toast; public class Control extends Activity implements Runnable { String tag = "MyControl"; public boolean BluetoothFlag = true; public int requestCode = 1, num1 = 0, num2 = 0,num3 = 0,runState = 0; private float HCenterX,HCenterY; private float RangeCenterX,RangeCenterY,RangeR = 100; private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); private ImageView iv1; private ImageView iv2; private ImageView iv3; private ImageButton ib1; FrameLayout.LayoutParams LP_iv2; private BluetoothAdapter mBluetoothAdapter = null; private BluetoothSocket btSocket = null; private static String address = null;//要连接的蓝牙设备MAC地址 private OutputStream outStream = null; private InputStream InStream = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.control); iv1 = (ImageView) findViewById(R.id.ct_iv1); iv2 = (ImageView) findViewById(R.id.ct_iv2); iv3 = (ImageView) findViewById(R.id.ct_iv3); ib1 = (ImageButton) findViewById(R.id.ct_ib1); ib1.setOnClickListener(new ClickEvent()); Animation Aiv1_zoom = AnimationUtils.loadAnimation(this, R.drawable.iv1_zoom); iv1.startAnimation(Aiv1_zoom); LP_iv2 = (FrameLayout.LayoutParams) iv2.getLayoutParams();//获取控件布局参数 Display display = getWindowManager().getDefaultDisplay(); RangeCenterX = display.getWidth() / 2; RangeCenterY = display.getHeight() / 2; mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (mBluetoothAdapter == null) { Toast.makeText(this, "您的设备不支持蓝牙", Toast.LENGTH_LONG).show(); Log.i(tag, "设备不支持蓝牙"); } } ………… public void sendCmd(String message) { try { outStream = btSocket.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } byte[] msgBuffer; msgBuffer = message.getBytes(); try { outStream.write(msgBuffer); } catch (IOException e) { e.printStackTrace(); } } @Override public void onStart() { super.onStart(); } @Override public void onResume() { super.onResume(); DisplayToast("正在尝试连接蓝牙设备,请稍后····"); if(address == null){ address = "00:12:06:01:51:26"; }else {} BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); try { btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);//我觉得是这的问题 } catch (IOException e) { DisplayToast("套接字创建失败!"); } DisplayToast("成功连接蓝牙设备!"); mBluetoothAdapter.cancelDiscovery(); try { btSocket.connect();// Debug到这应用退出 DisplayToast("连接成功建立,可以开始操控了~~~"); myText.setText("蓝牙设备已准备好了!"); sendCmd("Connect OK!"); BluetoothFlag = true; MyThread bluetoothThread = new MyThread(); bluetoothThread.start(); } catch (IOException e) { try { btSocket.close(); } catch (IOException e2) { DisplayToast("连接没有建立,无法关闭套接字!"); } } } @Override public void onPause() { super.onPause(); if (outStream != null) { try { outStream.flush(); } catch (IOException e) { e.printStackTrace(); } } try { btSocket.close(); BluetoothFlag = false;// 关闭蓝牙读线程 } catch (IOException e2) { } } @Override public void onStop() { super.onStop(); } @Override public void onDestroy() { mBluetoothAdapter.disable(); super.onDestroy(); } @Override public void run() { } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 & resultCode == 1) { address = data.getStringExtra("MAC"); } } private class ClickEvent implements View.OnClickListener { @Override public void onClick(View v) { switch (v.getId()) { case R.id.ct_ib1 : { num2 = 1; Intent intent = new Intent(Control.this, BlueTooth.class); startActivityForResult(intent, requestCode); } } } } class MyHandler extends Handler { @Override public void handleMessage(Message msg) { Bundle data = msg.getData(); Log.d(tag, "in the thread:age=" + data.getInt("age") + " name=" + data.getString("name")); try { InStream = btSocket.getInputStream(); } catch (IOException e) { e.printStackTrace(); } byte[] tmp = new byte[5]; try { InStream.read(tmp, 0, 5); Log.i(tag, new String(tmp, 0, 5) + " "); } catch (IOException e) { e.printStackTrace(); } } MyHandler(Looper looper) { super(looper); } MyHandler() {} } public class MyThread extends Thread { MyThread() { BluetoothFlag = true; try { InStream = btSocket.getInputStream(); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { byte[] tmp = null; while (BluetoothFlag) { try { demo(); } catch (Exception e) { e.printStackTrace(); } } } public String demo() throws IOException, InterruptedException { byte[] buffer = new byte[1]; int length = 0; byte bb = 0; String line = null; Log.i(tag, "demo"); ArrayList<Byte> list = new ArrayList<Byte>(); while (InStream.read(buffer) == -1) { Thread.sleep(100); Log.i(tag, "-->" + InStream.read(buffer)); } return null; } } } ```
用visual stutio 进行蓝牙开发时,怎么样在一个列表中显示出多个蓝牙设备的·名称?
button3.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub //获取本机的蓝牙设备,如果不存在蓝牙设在则返回空 BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); //测试本机是否存在蓝牙设备 if (adapter != null) { //获取已经连接的蓝牙设备,即存在已经连接过了的远程蓝牙设备 ListView listView1 = (ListView) findViewById(R.id.PireDeviceList); ArrayAdapter mmArrayAdapter = new ArrayAdapter( MainActivity.this, android.R.layout.simple_list_item_1); Set<BluetoothDevice> devices = adapter.getBondedDevices(); if (devices.size() > 0) { for (BluetoothDevice device : devices) { // Add the name and address to an array adapter to show in a ListView mmArrayAdapter.add(device.getName() + "\n" + device.getAddress()); } listView1.setAdapter(mmArrayAdapter); } } else { Log.d("BruceZhang", "此设备不存在蓝牙设备。。。"); } } }); private class BluetoothReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); ListView listView = (ListView) findViewById(R.id.DeviceList); ArrayAdapter mArrayAdapter = new ArrayAdapter( MainActivity.this, android.R.layout.simple_list_item_1); // When discovery finds a device if (BluetoothDevice.ACTION_FOUND.equals(action)) { // Get the BluetoothDevice object from the Intent BluetoothDevice devices = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // Add the name and address to an array adapter to show in a ListView mArrayAdapter.add(devices.getName() + "\n" + devices.getAddress()); } listView.setAdapter(mArrayAdapter); } }
Android 查找和连接蓝牙功能开发问题
在开发蓝牙功能的时候在网上下了一个demo,demo代码移植在我的一个测试项目上是完全可以查找和连接的,但是吧代码移植到我的正式工程的时候总是不行不知道怎么回事(报错信息在网上也不好找到解决原因),这里有这方面熟悉的朋友帮忙看下,如果如推荐的demo可以参考更为感谢 下面上代码和报错信息 查找蓝牙方法 ``` public void searchBlueToothDevice() { //Log.i(TAG, "searchBlueToothDevice(MainActivity.java:112)--->> " + "searchBlueToothDevice"); pdSearch = ProgressDialog.show(StockOutScan.this, "", "连接中", true, true); pdSearch.setCanceledOnTouchOutside(false); pdSearch.show(); mBluetoothList = new ArrayList<BluetoothBean>(); // 检查设备是否支持蓝牙 Bluetoothadapter = BluetoothAdapter.getDefaultAdapter(); if (Bluetoothadapter == null) { Toast.makeText(this, "当前设备不支持蓝牙", Toast.LENGTH_SHORT).show(); return; } // 如果蓝牙已经关闭就打开蓝牙 if (!Bluetoothadapter.isEnabled()) { Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); startActivity(intent); return; } // // 获取已配对的蓝牙设备 // Set<BluetoothDevice> devices = adapter.getBondedDevices(); // // 遍历 // int count = 0; // for (BluetoothDevice pairedDevice : devices) { // Log.i(TAG, "searchBlueToothDevice(MainActivity.java:137)--->> " + pairedDevice.getName()); // if (pairedDevice.getName() == null) { // return; // } else if (pairedDevice.getName().startsWith("Printer_29D0")) { // count++; // deviceAddress = pairedDevice.getAddress(); // mBluetoothDevice = adapter.getRemoteDevice(deviceAddress); // connect(deviceAddress, mBluetoothDevice); // break; // } // } if (Bluetoothadapter.isEnabled()) { //开始搜索 Bluetoothadapter.startDiscovery(); // 设置广播信息过滤 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(BluetoothDevice.ACTION_FOUND); intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); // 注册广播接收器,接收并处理搜索结果 receiver = new MyBroadcastReceiver(); registerReceiver(receiver, intentFilter); } } ``` 广播代码 ``` public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); //找到设备,有可能重复搜索同一设备,可在结束后做去重操作 if (BluetoothDevice.ACTION_FOUND.equals(action)) { BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); if (device == null) { return; } if (device.getName() == null) { return; } BluetoothBean bluetoothBean = new BluetoothBean(); bluetoothBean.mBluetoothName = device.getName(); bluetoothBean.mBluetoothAddress = device.getAddress(); bluetoothBean.mBluetoothDevice = Bluetoothadapter.getRemoteDevice(bluetoothBean.mBluetoothAddress); mBluetoothList.add(bluetoothBean); //Log.i(TAG, "onReceive(MainActivity.java:184)--->> " + device.getName()); //Log.i(TAG, "onReceive(MainActivity.java:185)--->> " + mBluetoothList.size()); // if (device.getName().startsWith("Printer_29D0")) { // //取消搜索 // adapter.cancelDiscovery(); // deviceAddress = device.getAddress(); // mBluetoothDevice = adapter.getRemoteDevice(deviceAddress); // connectState = device.getBondState(); // switch (connectState) { // // 未配对 // case BluetoothDevice.BOND_NONE: // // 配对 // try { // Method createBondMethod = mBluetoothDevice.getClass().getMethod("createBond"); // createBondMethod.invoke(mBluetoothDevice); // } catch (Exception e) { // e.printStackTrace(); // } // break; // // 已配对 // case BluetoothDevice.BOND_BONDED: // if (device.getName().startsWith("Printer_29D0")) { // connect(deviceAddress, mBluetoothDevice); // } // break; // } // } } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { //Log.i(TAG, "onReceive(MainActivity.java:213)--->> " + "搜索完成"); pdSearch.dismiss(); if (0 == mBluetoothList.size()) Toast.makeText(StockOutScan.this, "搜索不到蓝牙设备", Toast.LENGTH_SHORT).show(); else { //去重HashSet add会返回一个boolean值,插入的值已经存在就会返回false 所以true就是不重复的 HashSet<BluetoothBean> set = new HashSet<BluetoothBean>(); mBluetoothList2 = new ArrayList<BluetoothBean>(); for (BluetoothBean bean : mBluetoothList) { boolean add = set.add(bean); if (add) { mBluetoothList2.add(bean); } } showBluetoothPop(mBluetoothList2); } unregisterReceiver(receiver); } } } ``` 弹框显示搜索到的蓝牙 ``` //弹框显示蓝牙设备 private void showBluetoothPop(final List<BluetoothBean> bluetoothList) { bluetoothtitle = (TextView) dialogView.findViewById(R.id.bluetooth_btitle); bluetoothlistview = (ListView) findViewById(R.id.bluetooth_listview); if (myBluetoothAdapter == null) { myBluetoothAdapter = new MyBluetoothAdapter( StockOutScan.this,bluetoothList); } bluetoothlistview.setAdapter(myBluetoothAdapter); // 弹出对话框 bluetoothtitle.setText("选择连接蓝牙"); // 根据listview高度刷新弹框高度 refreshHeight(bluetoothlistview); } ``` 报错信息在注册广播方法哪一步 ![图片说明](https://img-ask.csdn.net/upload/201802/08/1518055190_239320.jpg)
Android蓝牙4.0串口通讯问题
大神,我通过UUID特征值去获取设备信息,如设备型号、设备名称、电量、信号。但是怎么也接收不到血糖或者血压值。这是怎么情况?能帮忙分析一下吗?
Android中连接蓝牙打印机没有UUID,能配对,但是socket不能连接 怎么办啊 各位大神!
### 1、Android中连接蓝牙打印机没有UUID,能配对,但是socket不能连接 ## - ### 2、网上找了很多都是说用这个UUID : ` SPP_UUID = "00001101-0000-1000-8000-00805F9B34FB"` ,可是还是不行。 ## - ### 3、蓝牙打印机型号是 Zebra ZD420 ## - ### 4、通过配对的设备信息 BluetoothDevice ` device.getUuids() ` 获取的UUID为空 ## - ### 5、连接方法 ``` java public void connect(final String mac, final Handler handler) { new Thread(new Runnable() { @Override public void run() { try { socket = device.createRfcommSocketToServiceRecord(UUID.fromString(BLEConfig.SPP_UUID)); if (socket != null) { System.out.println("socket不为空:开始连接..."); handler.sendEmptyMessage(CONN_START); socket.connect(); out = new PrintStream(socket.getOutputStream()); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); if (socket.isConnected()) { System.out.println("连接成功..."); handler.sendEmptyMessage(CONN_SUCCESS); ReceiveInfoThread.start(); } else { System.out.println("连接失败..."); handler.sendEmptyMessage(CONN_ERROR); } } } catch (IOException e) { e.printStackTrace(); System.out.println("打印机连接异常:"+e.getMessage()); try { socket.close(); } catch (IOException e1) { e1.printStackTrace(); } handler.sendEmptyMessage(CONN_ERROR); } } }).start(); } ```
android BLE 调用characteristic的getValue方法,返回null
android开发 bluetooth 现在在做BLE相关的项目,与设备连接之后,获取到了Service中的characteristic,但是调用characteristic的getValue方法,返回值为null. 并且characteristic属性方面可读 可写 没有问题
android蓝牙Socket.connect失败,socket might be closed
代码如下,测试发现toast直到“mmsocket成功”都是有的,mmSocket.connect(); 那失败了,抛出“连接服务端异常2” protected void onResume() { if(BluetoothMsg.isOpen) { Toast.makeText(mContext, "连接已经打开,可以通信。如果要再建立连接,请先断开!", Toast.LENGTH_SHORT).show(); return; } // 如果点选了远程设备去连接,则本机是客户端, 开启客户端线程,接收输入流数据 if(BluetoothMsg.serviceOrCilent==BluetoothMsg.ServerOrCilent.CLIENT) { String address = BluetoothMsg.BlueToothAddress; //将在UI界面选中连接的蓝牙地址赋给address if(!address.equals("null")) //如果蓝牙地址不为空 { //在mainactivity中的get到的本地蓝牙适配器实例化成了blueadapter,在这个activity中在开头实例化成了 mBluetoothAdapter,但是它们是同一个 device = mBluetoothAdapter.getRemoteDevice(address);//根据蓝牙地址获取远程蓝牙设备 // mBluetoothAdapter.cancelDiscovery(); if (device != null) { Toast.makeText(mContext, "device成功 !", Toast.LENGTH_SHORT).show(); } clientConnectThread = new clientThread(device); //新建并启动一个客户端线程 clientConnectThread.start(); BluetoothMsg.isOpen = true; //将BluetoothMsg类里的isOpen常量改为true } else { Toast.makeText(mContext, "蓝牙地址为空 !", Toast.LENGTH_SHORT).show(); } } // 如果本机是服务器,开启服务端线程,也接收输入流数据 else if(BluetoothMsg.serviceOrCilent==BluetoothMsg.ServerOrCilent.SERVICE) { } super.onResume(); } //2开启客户端 读取数据 private class clientThread extends Thread { private final BluetoothSocket mmSocket; public clientThread(BluetoothDevice device) { BluetoothSocket tmp = null; try { tmp = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")); } catch (IOException e) { Log.e("connect", "", e); Message msg = new Message(); msg.obj = "连接服务端异常1!断开连接重新试一试。"; msg.what = 0; LinkDetectedHandler.sendMessage(msg); } mmSocket = tmp; if (mmSocket!= null){ Toast.makeText(mContext, "mmSocket成功", Toast.LENGTH_SHORT).show(); } } public void run() { mBluetoothAdapter.cancelDiscovery(); try { mmSocket.connect(); } catch (IOException e) { Log.e("connect", "", e); Message msg = new Message(); msg.obj = "连接服务端异常2!断开连接重新试一试。"; msg.what = 0; LinkDetectedHandler.sendMessage(msg); return; } } }
安卓与蓝牙通讯socket连接不上
可以搜索并扫描设备但无法连接到设备并获取socket,不知道哪里的问题,求大神指点。 以下为部分代码: 寻找设备部分: ``` private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction();//服务发现远程设备时 String str = ""; if(BluetoothDevice.ACTION_FOUND.equals(action))//每扫描到一个设备,系统都会发送此广播 { //从Intent中获取device信息 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);//获取搜索到的设备信息 str = device.getName()+ ":" + device.getAddress() + "\n"; //当发现的新设备不存在于设备配对列表中时,将设备的名字和地址添加到ArrayAdapter中 if(listDevices.indexOf(str) == -1)//防止重复添加 { listDevices.add(str);//添加搜索到的设备信息 deviceAdapter.notifyDataSetChanged(); } } else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { Toast.makeText(WindFireDemoActivity.this, "Discovery finished", Toast.LENGTH_SHORT).show(); } } }; ``` listview点击事件: ``` text.setOnItemClickListener( new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> adapterview, View view, int position,long id) { // TODO Auto-generated method stub //绑定所选择的蓝牙MAC地址设备 String str = deviceAdapter.getItem(position); if(null == str) { Toast.makeText(getApplicationContext(), "未选中设备", Toast.LENGTH_SHORT).show(); } String mac = str.substring(str.indexOf(":")+1).trim();//str.substring(str.indexOf(":")+1)取名称 device = mBluetoothAdapter.getRemoteDevice(mac);//以mac去创建一个device new Thread(new ConnectThread()).start(); Toast.makeText(getApplicationContext(), "连接到所选设备", Toast.LENGTH_SHORT).show(); } }); ``` 连接socket部分: ``` public class ConnectThread extends Thread { public void run() { try{ if(mBluetoothAdapter.isDiscovering()){ mBluetoothAdapter.cancelDiscovery(); } btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); Toast.makeText(WindFireDemoActivity.this, "已退出搜索,连接Socket", Toast.LENGTH_SHORT).show(); btSocket.connect(); isConnected = true;//判断语句 Toast.makeText(WindFireDemoActivity.this, "sssssssss", Toast.LENGTH_SHORT).show(); } catch(IOException e){ e.printStackTrace(); Method m; try { m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class}); btSocket = (BluetoothSocket) m.invoke(device, 1); btSocket.connect(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); try{ btSocket.close(); }catch (IOException ie){ Toast.makeText(WindFireDemoActivity.this, "连接失败", Toast.LENGTH_SHORT).show(); } } } } ```
高德地图能获取到经纬度,但不能将地图移动到定位点,
package com.example.zengyue.gould_map; import android.app.Activity; import android.content.Intent; import android.icu.text.SimpleDateFormat; import android.os.Build; import android.os.Bundle; import android.support.annotation.RequiresApi; import android.util.Log; import android.view.Window; import android.widget.Toast; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; import com.amap.api.maps2d.AMap; import com.amap.api.maps2d.CameraUpdateFactory; import com.amap.api.maps2d.LocationSource; import com.amap.api.maps2d.MapView; import com.amap.api.maps2d.UiSettings; import com.amap.api.maps2d.model.LatLng; import java.util.Date; public class MainActivity extends Activity implements LocationSource,AMapLocationListener{ //AMap是地图对象 private AMap aMap; private MapView mMapView; //声明AMapLocationClient类对象,定位发起端 private AMapLocationClient mLocationClient = null; //声明mLocationOption对象,定位参数 public AMapLocationClientOption mLocationOption = null; //声明mListener对象,定位监听器 private OnLocationChangedListener mListener = null; //标识,用于判断是否只显示一次定位信息和用户重新定位 private boolean isFirstLoc = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); //获取地图控件 mMapView= (MapView) findViewById(R.id.map); //创建地图 mMapView.onCreate(savedInstanceState);//重写 if (aMap==null){ aMap =mMapView.getMap(); //设置显示定位按钮 并且可以点击 UiSettings settings = aMap.getUiSettings(); aMap.setLocationSource(this);//设置了定位的监听 // 是否显示定位按钮 settings.setMyLocationButtonEnabled(true); aMap.setMyLocationEnabled(true);//显示定位层并且可以触发定位,默认是flase } //开始定位 location(); } private void location() { //初始化定位 mLocationClient = new AMapLocationClient(getApplicationContext()); //初始化定位参数 mLocationOption = new AMapLocationClientOption(); //设置是否返回地址信息(默认返回地址信息) mLocationOption.setNeedAddress(true); //设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); // //设置是否只定位一次,默认为false // mLocationOption.setOnceLocation(false); // //设置是否强制刷新WIFI,默认为强制刷新 // mLocationOption.setWifiActiveScan(true); // //设置是否允许模拟位置,默认为false,不允许模拟位置 // mLocationOption.setMockEnable(true); //设置定位间隔,单位毫秒,默认为2000ms mLocationOption.setInterval(2000); //给定位客户端对象设置定位参数 mLocationClient.setLocationOption(mLocationOption); //启动定位 mLocationClient.startLocation(); //设置定位回调监听 mLocationClient.setLocationListener(this); } @Override protected void onResume() { super.onResume(); //重新绘制加载地图 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //暂停地图的绘制 mMapView.onResume(); } @Override protected void onDestroy() { super.onDestroy(); //销毁地图 mMapView.onDestroy(); mLocationClient.stopLocation();//停止定位 mLocationClient.onDestroy();//销毁定位客户端。 } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //保存地图的当前状态 mMapView.onSaveInstanceState(outState); } @RequiresApi(api = Build.VERSION_CODES.N) @Override public void onLocationChanged(AMapLocation aMapLocation) { Log.i("ttt",">>>>>>>>>>1"); if (aMapLocation != null) { Log.i("ttt",">>>>>>>>>>2"); if (aMapLocation.getErrorCode() == 0) { Log.i("ttt",">>>>>>>>>>"+aMapLocation.getLatitude()+">>>>>>>>>"+//获取纬度 aMapLocation.getLongitude()); //定位成功回调信息,设置相关消息 aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见官方定位类型表 aMapLocation.getLatitude();//获取纬度 aMapLocation.getLongitude();//获取经度 aMapLocation.getAccuracy();//获取精度信息 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(aMapLocation.getTime()); df.format(date);//定位时间 aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。 aMapLocation.getCountry();//国家信息 aMapLocation.getProvince();//省信息 aMapLocation.getCity();//城市信息 aMapLocation.getDistrict();//城区信息 aMapLocation.getStreet();//街道信息 aMapLocation.getStreetNum();//街道门牌号信息 aMapLocation.getCityCode();//城市编码 aMapLocation.getAdCode();//地区编码 Log.i("ttt",aMapLocation.getCountry().toString()+aMapLocation.getProvince().toString()+aMapLocation.getCity().toString()+aMapLocation.getDistrict().toString()+aMapLocation.getStreet().toString()); // 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置 if (isFirstLoc) { //设置缩放级别 aMap.moveCamera(CameraUpdateFactory.zoomTo(17)); //将地图移动到定位点 aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude()))); //点击定位按钮 能够将地图的中心移动到定位点 mListener.onLocationChanged(aMapLocation); //添加图钉 // aMap.addMarker(getMarkerOptions(amapLocation)); //获取定位信息 StringBuffer buffer = new StringBuffer(); buffer.append(aMapLocation.getCountry() + "" + aMapLocation.getProvince() + "" + aMapLocation.getCity() + "" + aMapLocation.getProvince() + "" + aMapLocation.getDistrict() + "" + aMapLocation.getStreet() + "" + aMapLocation.getStreetNum()); Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show(); isFirstLoc = false; Log.i("ttt",buffer.toString()); } } else { //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e("AmapError", "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show(); } } } //激活定位 @Override public void activate(OnLocationChangedListener onLocationChangedListener) { mListener=onLocationChangedListener; } //停止定位 @Override public void deactivate() { mListener=null; } } ``` <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.zengyue.gould_map"> <!--用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!--用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!--用于获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!--用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!--用于访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <!--用于读取手机当前的状态--> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <!--用于写入缓存数据到扩展存储卡--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!--用于申请调用A-GPS模块--> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission> <!--用于申请获取蓝牙信息进行室内定位--> <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <service android:name="com.amap.api.location.APSService"/> <meta-data android:name="com.amap.api.v2.apikey" android:value="c0fede08d244f741d053af1396317383" /> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> ``` <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.zengyue.gould_map.MainActivity"> <com.amap.api.maps2d.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent"> </com.amap.api.maps2d.MapView> </RelativeLayout>
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
兼职程序员一般可以从什么平台接私活?
这个问题我进行了系统性的总结,以下将进行言简意赅的说明和渠道提供,希望对各位小猿/小媛们有帮助~ 根据我们的经验,程序员兼职主要分为三种:兼职职位众包、项目整包和自由职业者驻场。 所谓的兼职职位众包,指的是需求方这边有自有工程师配合,只需要某个职位的工程师开发某个模块的项目。比如开发一个 app,后端接口有人开发,但是缺少 iOS 前端开发工程师,那么他们就会发布一个职位招聘前端,来配合公司一...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
写了很久,这是一份最适合/贴切普通大众/科班/非科班的『学习路线』
说实话,对于学习路线这种文章我一般是不写的,大家看我的文章也知道,我是很少写建议别人怎么样怎么样的文章,更多的是,写自己的真实经历,然后供大家去参考,这样子,我内心也比较踏实,也不怕误导他人。 但是,最近好多人问我学习路线,而且很多大一大二的,说自己很迷茫,看到我那篇 普普通通,我的三年大学 之后很受激励,觉得自己也能行,(是的,别太浪,你一定能行)希望我能给他个学习路线,说
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
碎片化的时代,如何学习
今天周末,和大家聊聊学习这件事情。 在如今这个社会,我们的时间被各类 APP 撕的粉碎。 刷知乎、刷微博、刷朋友圈; 看论坛、看博客、看公号; 等等形形色色的信息和知识获取方式一个都不错过。 貌似学了很多,但是却感觉没什么用。 要解决上面这些问题,首先要分清楚一点,什么是信息,什么是知识。 那什么是信息呢? 你一切听到的、看到的,都是信息,比如微博上的明星出轨、微信中的表情大战、抖音上的...
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。 背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法 不过,当我看了源代码之后 这程序不到50行 尽管我有多年的Python经验,但我竟然一时也没有看懂 当然啦,原作者也说了,这个代码也是在无聊中诞生的,平时撸码是不写中文变量名的, 中文...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
相关热词 如何提升c#开发能力 矩阵乘法c# c#调用谷歌浏览器 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天
立即提问