2011-08-13 16 views
5

काम नहीं कर रहा है मैंने वाईफाई स्कैन पूरा होने पर टोस्ट संदेश दिखाने के लिए एक साधारण प्रसारण रिसीवर लिखा है। कुछ भी नहीं दिख रहा है।वाईफ़ाई स्कैन परिणाम प्रसारण रिसीवर

package com.wifi; 

import java.util.List; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.wifi.ScanResult; 
import android.net.wifi.WifiManager; 
import android.widget.Toast; 

public class wifiReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context,"Scan completed", Toast.LENGTH_LONG).show(); 

    } 

} 

यहाँ है मैनिफ़ेस्ट फ़ाइल:

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


    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".wifi" android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    <receiver android:name=".wifiReceiver"> 
     <intent-filter> 
      <action android:name="android.net.wifi.SCAN_RESULTS"></action> 
     </intent-filter> 
    </receiver> 
    </application> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
</manifest> 
+0

यह मदद कर सकता है http://stackoverflow.com/questions/4238921/android-detect-whether-there-is-an-internet-connection-available – androidnoob

+0

लगता है कोई भाग्य @Nikud, ...मैंने इसी तरह की समस्या देखी, – gumuruh

उत्तर

10
अच्छी तरह से

, यह नहीं है कि आसान ;-)
वहाँ रहे हैं याद आ रही ... यहाँ चीजों की जोड़ी एक उदाहरण है यहाँ मेरी कोड है एक वाईफ़ाई स्कैन के - मूल स्रोत कोड यहाँ स्थित है http://www.androidsnippets.com/scan-for-wireless-networks

package com.android.wifitester; 

import java.util.List; 
import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.net.wifi.ScanResult; 
import android.net.wifi.WifiManager; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.TextView; 

public class WifiTester extends Activity { 
TextView mainText; 
WifiManager mainWifi; 
WifiReceiver receiverWifi; 
List<ScanResult> wifiList; 
StringBuilder sb = new StringBuilder(); 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    mainText = (TextView) findViewById(R.id.mainText); 
    mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    receiverWifi = new WifiReceiver(); 
    registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 
    mainWifi.startScan(); 
    mainText.setText("\\nStarting Scan...\\n"); 
} 

public boolean onCreateOptionsMenu(Menu menu) { 
    menu.add(0, 0, 0, "Refresh"); 
    return super.onCreateOptionsMenu(menu); 
} 

public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    mainWifi.startScan(); 
    mainText.setText("Starting Scan"); 
    return super.onMenuItemSelected(featureId, item); 
} 

protected void onPause() { 
    unregisterReceiver(receiverWifi); 
    super.onPause(); 
} 

protected void onResume() { 
    registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 
    super.onResume(); 
} 

class WifiReceiver extends BroadcastReceiver { 
    public void onReceive(Context c, Intent intent) { 
     sb = new StringBuilder(); 
     wifiList = mainWifi.getScanResults(); 
     for(int i = 0; i < wifiList.size(); i++){ 
      sb.append(new Integer(i+1).toString() + "."); 
      sb.append((wifiList.get(i)).toString()); 
      sb.append("\\n"); 
     } 
     mainText.setText(sb); 
    } 
} 
} 
+0

तो आपके मैनिफेस्ट में एक साधारण रिसीवर सेट के साथ यह नहीं किया गया है? आपको अपनी गतिविधि के माध्यम से ऐसा करना है? –

0

मैं ऊपर कोड मेरी manifes में निम्नलिखित के साथ काम मिल गया टी:

<receiver android:name="com.mumfordmedia.trackify.WifiReceiver" android:enabled="true"> 
<intent-filter> 
    <action android:name="android.net.wifi.SCAN_RESULTS"></action> 
</intent-filter> 

सूचना दोनों एंड्रॉयड: सक्षम रिसीवर तत्व में = "true" विशेषता है, और वर्ग है कि जब संदेश प्राप्त होता है करने के लिए "का विरोध के रूप में निष्पादित किया जाना चाहिए करने के लिए पूरा पथ। classname "।।

एक प्रारंभिक बिंदु के लिए शुभकामनाएँ और धन्यवाद, मैक्स

0

मैं ऊपर मैक्स की जवाब के साथ शुरू कर दिया है, और जब कि काम किया, मैं एंड्रॉयड को दूर करने के लिए रवाना: सक्षम =" true "और फिर एंड्रॉइड बदल दिया: name = "। MyReceiver" (पूरा पथ नहीं)। यह काम करना जारी रखता है (2.2, एपीआई 8)! "काम" से मेरा मतलब है कि जब मैंने वाईफाई चालू और बंद कर दिया तो मेरा रिसीवर प्रसारण प्रसारित हुआ (मैंने नहीं किया एक्स्ट्रा कलाकार आदि) में प्रहार। मैं भी ACCESS_WIFI_STATE और CHANGE_WIFI_STATE अनुमति है।

<receiver android:name=".MyReceiver"> 
<intent-filter> 
<!-- 
<action android:name="android.net.wifi.STATE_CHANGED"/> 
--> 
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> 
<action android:name="android.net.wifi.SCAN_RESULTS"/> 
</intent-filter> 
+0

क्या उपयोग-अनुमति टैग को लागू करने का उचित तरीका है? मैंने इसे यहां नहीं देखा ... @ पीवीएस, इसके बजाय आप इसे एक्शन टैग के तहत डाल दिया? – gumuruh

1

मैं क्या किया था और अधिकतम पीवीएस ने उपयोग-अनुमतियों को भी हटा दिया और फिर भी स्कैन एक्शन चलाया।

डॉक्स को देखते हुए प्रकट

से निकाल दिया गया है तो आप कोई उपयोग करता है-अनुमतियाँ अगर अपने रिसीवर जिसे भेज सकते हैं के रूप में अप्रतिबंधित है, लेकिन यदि आप हमें उपयोग करता अनुमतियों तो प्रसारण समान अनुमतियाँ होना आवश्यक है लगता है।

मैंने इसे रिसीवर में कई कार्रवाइयों (नीचे) के साथ परीक्षण किया और उन्हें प्राप्त किया। लेकिन एक बार जब मैं किसी भी तरह के उपयोग-अनुमतियों में डालता हूं तो मुझे कोई प्रसारण नहीं होता है, अजीब।

<receiver android:name=".myReceiver" android:enabled="true"> 
     <intent-filter android:priority="99999999999"> 
      <action android:name="android.intent.action.FOUND" /> 
      <action android:name="android.location.PROVIDERS_CHANGED" />    
      <action android:name="android.hardware.action.NEW_PICTURE" /> 
      <action android:name="android.hardware.action.NEW_VIDEO" /> 
      <action android:name="android.net.wifi.STATE_CHANGE" /> 
      <action android:name="android.net.wifi.NETWORK_IDS_CHANGED" /> 
      <action android:name="android.net.wifi.SCAN_RESULTS" /> 
      <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" /> 
      <action android:name="android.net.wifi.supplicant.STATE_CHANGE" /> 
      <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" /> 
      <category android:name="android.intent.category.DEFAULT" />   
     </intent-filter>    
    </receiver> 
2

मैं इस पर कुछ समय बिताया है, और Android का कौनसा संस्करण आप इस मदद कर सकता है चल रहे हैं पर निर्भर करता है। एंड्रॉइड एम के लिए, ऐसा प्रतीत होता है कि आपको स्थान सेवाओं को सक्षम करना है, इसलिए यदि आप इस मानदंड के अंतर्गत आते हैं तो इसे अपने कोड में जोड़ने का प्रयास करें।

private static final int PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION = 1001; 

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){ 
     requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION); 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, 
             int[] grantResults) { 
    if (requestCode == PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION 
      && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
     // TODO: What you want to do when it works or maybe .PERMISSION_DENIED if it works better 
    } 
} 

अपने प्रकट करने के लिए निम्न जोड़ने के लिए मत भूलना:

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

उम्मीद है कि इस मदद करता है।

संबंधित मुद्दे