Android广播接收器在redmi上不工作
我碰巧遇到这个问题,我的Android广播接收器在redmi上不工作,android,Android,我碰巧遇到这个问题,我的广播接收器不再接收蓝牙发现启动/停止或设备发现事件的广播。它工作得非常好,突然不知从哪里他们停止了工作。但是,相同的代码在mymoto e上运行良好(正在捕获发现和新设备查找) 但是为什么不在我的红色mi note 3上呢,尽管它在以前的某个时候起作用了 代码就像 package com.bluetoothtwo; import android.Manifest; import android.bluetooth.BluetoothAdapter; import an
广播
接收器不再接收蓝牙
发现启动/停止或设备发现事件的广播。它工作得非常好,突然不知从哪里他们停止了工作。但是,相同的代码在mymoto e
上运行良好(正在捕获发现和新设备查找)
但是为什么不在我的红色mi note 3
上呢,尽管它在以前的某个时候起作用了
代码就像
package com.bluetoothtwo;
import android.Manifest;
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.content.pm.PackageManager;
import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Set;
import java.util.UUID;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_ENABLE_BT = 20;
Set<BluetoothDevice> devicesArray;
BluetoothAdapter mBluetoothAdapter;
ArrayList<BluetoothDevice> pairedDevices;
ArrayList<BluetoothDevice> connectedDevices;
ArrayList<String> displayValues;
//TextView myBondedDevices;
IntentFilter filter;
BroadcastReceiver myreceiver;
ListAdapter listAdapter;
ListView devicesList;
public static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
Handler mHandler;
public static final int SUCCESS_CONNECT = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pairedDevices = new ArrayList<>();
devicesList = (ListView)findViewById(R.id.listView);
displayValues = new ArrayList<>();
listAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,displayValues);
connectedDevices = new ArrayList<>();
pairedDevices = new ArrayList<>();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Only ask for these permissions on runtime when running Android 6.0 or higher
switch (ContextCompat.checkSelfPermission(getBaseContext(), Manifest.permission.BLUETOOTH)) {
case PackageManager.PERMISSION_DENIED:
Log.i("permission","bt denied");
break;
case PackageManager.PERMISSION_GRANTED:
Log.i("permission","bt granted");
break;
}
switch (ContextCompat.checkSelfPermission(getBaseContext(), Manifest.permission.BLUETOOTH_ADMIN)) {
case PackageManager.PERMISSION_DENIED:
Log.i("permission","bt admin denied");
break;
case PackageManager.PERMISSION_GRANTED:
Log.i("permission","bt admin granted");
break;
}
}
int MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION = 1;
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION);
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
// Device does not support Bluetooth
Toast.makeText(this,"No Adapter",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"Bluetooth adapter exists",Toast.LENGTH_SHORT).show();
if (!mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
Log.i("Printttttt","------>");
getPairedDevices();
}
myreceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.i("found","test ------ ");
if(BluetoothDevice.ACTION_FOUND.equals(action)){
Log.i("status","Device found");
String p = "";
BluetoothDevice dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
connectedDevices.add(dev);
if(pairedDevices.indexOf(dev)>=0){
p = "(Paired)";
}
displayValues.add(dev.getName()+" "+p+"\n"+dev.getAddress());
((BaseAdapter)listAdapter).notifyDataSetChanged();
}
else if(BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)){
Log.i("status","state chnaged");
if(mBluetoothAdapter.getState() != mBluetoothAdapter.STATE_OFF){
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
}
else if(BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)){
Log.i("status","Discovery started");
}
else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)){
Log.i("status","Discovery completed");
}
}
};
Log.i("status",">>>>>>>>>>>>>>>.");
filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
filter.addAction("");
registerReceiver(myreceiver,filter);
filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(myreceiver,filter);
filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
registerReceiver(myreceiver,filter);
filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(myreceiver,filter);
mBluetoothAdapter.startDiscovery();
Log.i("status","////////////");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_CANCELED){
Toast.makeText(this,"cancelled",Toast.LENGTH_SHORT).show();
//finish();
}
else if (resultCode == RESULT_OK){
Toast.makeText(this,"activated",Toast.LENGTH_SHORT).show();
//finish();
getPairedDevices();
}
}
public void getPairedDevices(){
devicesArray = mBluetoothAdapter.getBondedDevices();
if(devicesArray.size()>0){
for(BluetoothDevice a : devicesArray){
pairedDevices.add(a);
}
}
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(myreceiver);
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bluetoothtwo">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<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>
package com.bluetoothtwo;
导入android.Manifest;
导入android.bluetooth.BluetoothAdapter;
导入android.bluetooth.bluetooth设备;
导入android.bluetooth.BluetoothSocket;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.content.IntentFilter;
导入android.content.pm.PackageManager;
导入android.os.Build;
导入android.os.Handler;
导入android.os.Message;
导入android.support.v4.app.ActivityCompat;
导入android.support.v4.content.ContextCompat;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.BaseAdapter;
导入android.widget.ListAdapter;
导入android.widget.ListView;
导入android.widget.Toast;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.OutputStream;
导入java.util.ArrayList;
导入java.util.Set;
导入java.util.UUID;
公共类MainActivity扩展了AppCompatActivity{
私有静态最终整数请求\启用\ BT=20;
设置设备阵列;
蓝牙适配器mBluetoothAdapter;
阵列列表对设备;
阵列列表连接设备;
ArrayList显示值;
//TextView myBondedDevices;
过滤器;
广播接收机;
列表适配器列表适配器;
ListView设备列表;
公共静态最终UUID MY_UUID=UUID.fromString(“00001101-0000-1000-8000-00805f9b34fb”);
汉德勒;
公共静态最终int成功_CONNECT=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pairedDevices=新的ArrayList();
DeviceList=(ListView)findViewById(R.id.ListView);
displayValues=新的ArrayList();
listAdapter=newArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,displayValues);
connectedDevices=new ArrayList();
pairedDevices=新的ArrayList();
如果(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){//运行Android 6.0或更高版本时,仅在运行时请求这些权限
开关(ContextCompat.checkSelfPermission(getBaseContext(),Manifest.permission.BLUETOOTH)){
案例包管理器.权限被拒绝:
Log.i(“许可”、“bt拒绝”);
打破
案例包管理器授予的权限:
日志i(“许可”、“授予bt”);
打破
}
开关(ContextCompat.checkSelfPermission(getBaseContext(),Manifest.permission.BLUETOOTH_ADMIN)){
案例包管理器.权限被拒绝:
Log.i(“许可”、“bt管理员被拒绝”);
打破
案例包管理器授予的权限:
Log.i(“许可”、“授予bt管理员”);
打破
}
}
int MY_PERMISSIONS_REQUEST_ACCESS_rough_LOCATION=1;
ActivityCompat.requestPermissions(此,
新字符串[]{Manifest.permission.ACCESS\u\u LOCATION},
我的权限、请求、访问、位置);
mBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter==null){
//设备不支持蓝牙
Toast.makeText(这个“无适配器”,Toast.LENGTH_SHORT).show();
}否则{
Toast.makeText(这个“蓝牙适配器存在”,Toast.LENGTH_SHORT.show();
如果(!mBluetoothAdapter.isEnabled()){
Intent enablebintent=新意图(BluetoothAdapter.ACTION\u REQUEST\u ENABLE);
startActivityForResult(启用BTIntent、请求\启用\ BT);
}
Log.i(“printtttttt”,“-->”);
getPairedDevices();
}
myreceiver=新广播接收器(){
@凌驾
公共void onReceive(上下文、意图){
String action=intent.getAction();
Log.i(“发现”、“测试------”);
if(BluetoothDevice.ACTION_FOUND.equals(ACTION)){
Log.i(“状态”、“找到设备”);
字符串p=“”;
BluetoothDevice dev=intent.getParcelableExtra(BluetoothDevice.EXTRA\u设备);
connectedDevices.add(dev);
if(pairedDevices.indexOf(dev)>=0){
p=“(成对)”;
}
displayValues.add(dev.getName()+“”+p+“\n”+dev.getAddress());
((BaseAdapter)listAdapter).notifyDataSetChanged();
}
else if(BluetoothAdapter.ACTION\u STATE\u CHANGED.equals(ACTION)){
日志i(“状态”、“状态变化”);
if(mBluetoothAdapter.getState()!=mBluetoothAdapter.STATE\u OFF){
Intent enablebintent=新意图(BluetoothAdapter.ACTION\u REQUEST\u ENABLE);
startActivityForResult(启用BTIntent、请求\启用\ BT);
}
}
else if(BluetoothAdapter.ACTION\u DISCOVERY\u STARTED.equals(ACTION)){
Log.i(“状态”、“发现已开始”);
}
else if(BluetoothAdapter.ACTION\u DISCOVERY\u FINISHED.equals(ACTION))