【问题标题】:WiFi broadcast receiver not delivering in Android 7.1.1WiFi 广播接收器未在 Android 7.1.1 中提供
【发布时间】:2017-03-17 10:10:03
【问题描述】:

使用 Android-7.1.1、SDK-25.3.0

我的 WiFi 广播接收器有问题。直到 Android-7.0.x 一切正常。但是现在,已经更新到 Android-7.1.1。使用最新的 SDK,我的 WiFi-broadcast-receiver 不再返回任何值。

List<ScanResult> resultList = wifi.getScanResults(); 返回 0(而不是像之前的一些有价值的值)。为什么是这样 ??? Android更新可能导致什么或我的代码中有任何错误?任何帮助表示赞赏!

下面是我的代码:

在 Fragment 内设置 WiFi-broadcast-receiver(不是完整的 Fragment,而是 excerts...):

public class ScanTeachingFragment extends Fragment implements MyWifiReceiver.OnWiFiResultListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // set up WiFi Manager
        this.wifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
        if (wifiManager.isWifiEnabled()) {
            // register Broadcast-Receiver for WiFi
            receiverWifi = new MyWifiReceiver(this.context);
            IntentFilter filterWiFi = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
            getActivity().registerReceiver(receiverWifi, filterWiFi);
        }
        // setListener necessary otherwise null-pointer occurs in WiFiReceiver
        receiverWifi.setListener(this);
    }

    private void ScanWifi() {

        if (!IndoorNavHelpers.inEmulator()) {
            wifiManager.setWifiEnabled(true);
            wifiManager.startScan();
        }
    }
}

这里是 WiFi-broadcast-receiver 实现:

package com.xxxx.yyyy.broadcast_receiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import java.util.List;

public class MyWifiReceiver extends BroadcastReceiver {

    private Context context;
    OnWiFiResultListener resultListener;

    // ScanFragment must implement this interface
    public interface OnWiFiResultListener {
        void scanWiFireceived(List<ScanResult> resultList);
    }
    // create setListener class (otherwise null-pointer occurs)
    public void setListener(OnWiFiResultListener listener) {
        this.resultListener = listener;
    }

    public MyWifiReceiver(Context context)
    {
        this.context = context;
    }
    // This method call when number of wifi connections changed
    public void onReceive(final Context context, Intent intent) {

        WifiManager wifi = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
        List<ScanResult> resultList = wifi.getScanResults();

        // ???????????????????????????????????????????????????????????
        // Here resultList returns 0, WHY ????????????????????????????
        // ???????????????????????????????????????????????????????????

        // append newly found WiFi-scanResults to WiFiSniffing_File by calling callback-method in MainActivity
        if(resultListener != null) {
            resultListener.scanWiFireceived(resultList);
        }
    }
}

这是我的 gradle 文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.xxxx.yyyy"
        minSdkVersion 25
        targetSdkVersion 25
        versionCode 1
        versionName "0.0.2(26)"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:25.3.0'
    compile 'com.android.support:support-v4:25.3.0'
    compile 'com.android.support:design:25.3.0'
    compile files('libs/ftp4j-1.7.2.jar')
    compile 'org.greenrobot:eventbus:3.0.0'
    compile 'com.github.johnkil.print:print:1.2.2'
    compile 'com.github.bmelnychuk:atv:1.2.+'
}

这是我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xxxx.yyyy">

    <uses-permission android:name="android.permission.USE_FINGERPRINT" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

    <uses-permission android:name="android.permission.android.permission.WAKE_LOCK" />

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/yyyy_icon"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:largeHeap="true">
        <activity
            android:name=".activity.MainActivity"
            android:launchMode="singleTop"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar"
            android:screenOrientation="portrait"
            android:excludeFromRecents="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
                <action android:name="android.hardware.usb.action.USB_DEVICE_DETATCHED" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" />
            <meta-data android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" android:resource="@xml/device_filter" />
        </activity>
    </application>

</manifest>

【问题讨论】:

    标签: android android-fragments broadcastreceiver wifi


    【解决方案1】:

    我终于找到了解决方案:如果我将 Nexus 5X 恢复出厂设置并重新安装 Android Nougat 7.1.1,那么我的代码将再次运行!不知道在此期间是什么破坏了移动安装???因此,上面的代码现在可以工作了!

    【讨论】:

      【解决方案2】:

      打开你的 GPS..

      对于 Android 7,获取 Wi-Fi 扫描结果需要权限 ACCESS_COARSE_LOCATION 和 ACCESS_FINE_LOCATION。您还必须在设备上打开位置信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多