Java Wifi广播安卓内部安卓意图

Java Wifi广播安卓内部安卓意图,java,android,android-intent,android-wifi,Java,Android,Android Intent,Android Wifi,我正在学习android,我被困在这里: 我正在编写的应用程序定期在后台扫描Wifi信号。我也在使用安卓意向服务。问题是,应用程序从不执行BroadCastReceiver的onReceive方法 意图代码: public class BackgroundIntent extends IntentService { // Default Constructor public BackgroundIntent() { super("BackgroundIntent

我正在学习android,我被困在这里:

我正在编写的应用程序定期在后台扫描Wifi信号。我也在使用安卓意向服务。问题是,应用程序从不执行BroadCastReceiver的onReceive方法

意图代码:

public class BackgroundIntent extends IntentService {

    // Default Constructor
    public BackgroundIntent() {
        super("BackgroundIntent");
        // TODO Auto-generated constructor stub
    }

    WifiManager mainWifi;
    BroadcastReceiver receiverWifi;

    private final Handler handler = new Handler();

    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    @Override
    protected void onHandleIntent(Intent intent) {
        // TODO Auto-generated method stub

        // Get mainWifi
        mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        if (mainWifi.isWifiEnabled() == false) {
            mainWifi.setWifiEnabled(true);
        }

        receiverWifi = new WifiReceiver();
        doInback();

    }

    // Basically a thread which calls itself after 5000milli sec
    public void doInback() {
        handler.postDelayed(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                mainWifi.startScan();
                Log.i("Inside ", "doInBack");

                // Call itself CODE GOES HERE :D
                doInback();
            }
        }, 5000);

    }

    public class WifiReceiver extends BroadcastReceiver {

        @TargetApi(Build.VERSION_CODES.GINGERBREAD)
        public void onReceive(Context c, Intent intent) {

            // CODE NEVER GOES HERE :(

            List<ScanResult> wifiList;
            wifiList = mainWifi.getScanResults();

            Log.i("Inside receiver", "yes");

        }
    }
}
知道原因是什么吗?这是实施后台wifi信号扫描的错误方法。
当我在Main Activity中实现时,同样可以运行良好,因此我猜AndroidManifest.xml的编写是正确的。

编辑:我可能误解了您的目标,如果您只是想知道为什么onReceive没有启动,那么您的活动必须注册接收者。如下所示:

receiverWifi = new WifiReceiver();
registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
doInback();

所以问题在于我使用的函数

我使用的是onHandleIntentintent,这是一个错误的函数。右一个是onStartCommandintent,flags,startId用于服务


很抱歉..

很抱歉我不明白,我已经在使用WifireceiverTried的广播接收器,仍然没有结果:它进入doInback但无法调用onReceive这是您所能做的最好的,onReceive不会立即执行,因为它可能仍在扫描。扫描可能需要1秒到1小时,您最好设置一个接收器并交叉手指:谢谢您的及时回复!扫描的延迟是因为在安卓系统内部使用了此功能吗?它在室内活动时工作得非常好。。如果是这种情况,我会将此标记为已解决,也会将其标记为已解决,没有区别。。我还在日志中检查了它,doInback函数按预期在5秒后调用。这意味着wifi扫描没有延迟。。在解决这个问题之前,我会让这个问题再公开一天。谢谢
receiverWifi = new WifiReceiver();
registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
doInback();