簡體   English   中英

OnReceive沒有被調用

[英]OnReceive not being called as it should

通過四處搜尋,我找到了一種掃描該區域內wifi網絡並通過TextView顯示這些結果的方法。 這是代碼:

受保護的void onCreate(Bundle savedInstanceState){

    super.onCreate(savedInstanceState);
    setContentView(R.layout.wifinetworks);
    mainText = (TextView) findViewById(R.id.mainText);
    mainText.setText("");

    mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

    if(mWifiManager.isWifiEnabled()==false)
    {
        mWifiManager.setWifiEnabled(true);
    }
    receiverWifi = new WifiReceiver();
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
    registerReceiver(receiverWifi, intentFilter);
    mainText.setText("Starting Scan...");
    mWifiManager.startScan();
}



public class WifiReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(debugString, "I am in onRecieve");
        List<ScanResult> wifiScanList = mWifiManager.getScanResults();
        mainText.setText("");
        for (int i = 0; i < wifiScanList.size(); i++) {
            String info = (wifiScanList.get(i).toString());
            mainText.append(info + "\n\n");
        }
    }

}

日志語句似乎從未被調用,並且清單文件中具有以下權限:

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

這里可能出什么問題了? 感謝任何建議。

編輯:我意識到我沒有在清單中聲明我的接收器,所以我做了一個WifiReceiver類(上面有更改),並這樣聲明了它:

 <receiver android:name="com.example.alexander.bluetoothcontroller.MainActivity$WifiReceiver" android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
        </intent-filter>
    </receiver>

但是,除非我在聲明中缺少某些內容,否則這仍然沒有任何改變。 我還添加了建議的額外權限,但仍然沒有任何更改。 我確實注意到了這個在logcat中脫穎而出的調用棧:

08-09 14:27:17.821 1579-1622 /? E / WifiHW:無法停止請求方08-09 14:27:17.821 1579-1622 /? E / wifi:無法初始化供應商功能指針表08-09 14:27:17.821 1579-1622 /? E / WifiNative-HAL:無法啟動hal 08-09 14:27:17.821 1579-1622 /? E / WifiStateMachine:無法啟動HAL 08-09 14:27:17.821 1579-1622 /? E / WifiHW:無法打開“ /system/etc/wifi/wpa_supplicant.conf”:沒有這樣的文件或目錄08-09 14:27:17.821 1579-1622 /? E / WifiHW:無法啟用Wi-Fi 08-09 14:27:17.821 1579-1622 /? E / WifiStateMachine:無法啟動請求方! 08-09 14:27:17.822 1579-1579 /? E / WifiController:WifiControllerWifi開啟失敗

這可能是問題嗎?

編輯2:

因此,我嘗試在運行時檢查權限,但仍然沒有任何更改。

  private  boolean checkAndRequestPermissions() {
    int wifi_state = ContextCompat.checkSelfPermission(this, permission.ACCESS_WIFI_STATE);
    int change_wifi_state = ContextCompat.checkSelfPermission(this, permission.CHANGE_WIFI_STATE);
    int loc = ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION);
    int loc2 = ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION);
    int internet = ContextCompat.checkSelfPermission(this, permission.INTERNET);
    List<String> listPermissionsNeeded = new ArrayList<>();

    if (wifi_state != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(permission.ACCESS_WIFI_STATE);
    }
    if (change_wifi_state != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(permission.CHANGE_WIFI_STATE);
    }
    if (loc2 != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(android.Manifest.permission.ACCESS_FINE_LOCATION);
    }
    if (loc != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(android.Manifest.permission.ACCESS_COARSE_LOCATION);
    }

    if (internet != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(permission.INTERNET);
    }

    if (!listPermissionsNeeded.isEmpty())
    {
        ActivityCompat.requestPermissions(this,listPermissionsNeeded.toArray
                (new String[listPermissionsNeeded.size()]),REQUEST_ID_MULTIPLE_PERMISSIONS);
        return false;
    }
    return true;
}

我在onCreate中調用此方法。 我仍然收到Controller Wifi也無法打開的調用堆棧消息,我認為這是越來越多的問題。

要通過藍牙和Wi-Fi掃描訪問附近的外部設備的硬件標識符,您的應用現在必須具有ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION權限

嘗試添加缺少的權限ACCESS_COARSE_LOCATION

來源: https : //developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id

這個問題是我的一個錯誤,當我應該使用實際的手機時,我正在使用android模擬器來測試我的應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM