SOを検索して、エリア内のWi-Fiネットワークをスキャンし、その結果をTextViewで表示する方法を見つけました。ここでは、コードは次のようになります。OnReceiveが呼び出されないように
<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"/>
:ログ・ステートメントが呼び出されるように見えることはありません、と私は私のマニフェストファイルに次の権限が無効のonCreate(バンドル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");
}
}
}
を保護
ここで何がうまくいかないでしょうか?提案を感謝してください。
EDIT:
<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>
しかし、これはまだ何も変更しませんでした:私は、私はWifiReceiverクラスを作った(変更は上記されている)ので、同じようにそれを宣言し、私はマニフェストに私の受信機を宣言していなかったことに気づきました私が宣言に何かを忘れていない限り。私はまた示唆された余分の許可を加えましたが、まだ何も変わっていません。私は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:開始できませんでした 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の電源がオンにならない
これが問題になりますか?
EDIT 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がオンにならなかったコールスタックメッセージを取得していますが、これはますます問題になると考えています。 のBluetoothとWi-Fiのスキャンを経由して近くの外部デバイスのハードウェア識別子にアクセスするには
Androidマニフェストで受信機を定義しましたか? –
はい、私は今マニフェストで受信者を宣言しようとしましたが、何も変更されませんでした。私が間違っていると思う唯一のものは、おそらくWifiがコールスタックによって示されているように、正しく有効にされていないことでしょうか? –
あなたのテストデバイスのAndroidのバージョンは何ですか? –