Android广播接收器在redmi上不工作

Android广播接收器在redmi上不工作,android,Android,我碰巧遇到这个问题,我的广播接收器不再接收蓝牙发现启动/停止或设备发现事件的广播。它工作得非常好,突然不知从哪里他们停止了工作。但是,相同的代码在mymoto e上运行良好(正在捕获发现和新设备查找) 但是为什么不在我的红色mi note 3上呢,尽管它在以前的某个时候起作用了 代码就像 package com.bluetoothtwo; import android.Manifest; import android.bluetooth.BluetoothAdapter; import an

我碰巧遇到这个问题,我的
广播
接收器不再接收
蓝牙
发现启动/停止或设备发现事件的广播。它工作得非常好,突然不知从哪里他们停止了工作。但是,相同的代码在my
moto 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))