如何在android中启动和停止处理程序服务

时间:2013-09-04 07:22:23

标签: android android-intent android-service

我正在开发一个使用服务的应用程序。我希望在手机处于睡眠模式时启动和停止服务。我正在使用以下代码,但它不起作用。

我的状态检查服务代码是

public void onStart(Intent intent, int startd) {

Log.v("check","Services is running");
Log.v("spinner Value","Services is running");
  handler.removeCallbacks(sendNetworkStatus);
    handler.postDelayed(sendNetworkStatus, 1000);
     dataManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
     wifimanager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
      boolean screenOn = intent.getBooleanExtra("screen_state", false);
      if (!screenOn) {
          // YOUR CODE
          Log.v("Screen","Screen is on>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
         /* if(!isMyServiceRunning())
          {
              startService(intent);  
          }*/    
      } else {
          // YOUR CODE
        // stopService(intent);
          Log.v("Screen","Screen is off>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
      }
}



@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

private Runnable sendNetworkStatus = new Runnable() {
    public void run() {
        sendNetworkInfo();
        handler.postDelayed(this, 5000);
         checkstrength(wifiStatus,mobileStatus);
         messageshow(response);
         Log.v("check","ping the URL again and again");
    }
};
/*@Override
public boolean onUnbind(Intent intent) {
    handler.removeCallbacks(sendNetworkStatus);
    handler = null;
    return super.onUnbind(intent);
}*/
private void sendNetworkInfo() {
    ConnectivityManager connection = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo         activeNetwork       = connection.getActiveNetworkInfo();

    if (null != activeNetwork) {
        if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
        {//wifiStatus = "Wifi Status: UP";

         wifiStatus= getWifiSignalStrengthIndBm();
         telephonyManager.listen(phoneStateListener,      
                    PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);

        }
        else{
            wifiStatus=0;
        }

         if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
            {//mobileStatus = "Mobile Status: UP";
             message="mobile";
            // filter.addAction("mobile");
            telephonyManager.listen(phoneStateListener,      
            PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);

            }
         else{
             //mobileStatus=0;
             telephonyManager.listen(phoneStateListener,      
                        PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
         }
         try {
                response = Network.ping(url);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

    } 
    else{

        mobileStatus = 0;
        wifiStatus = 0;
        response="-1";
    }

    intent.putExtra("status", response);
    sendBroadcast(intent);
}
 public int getWifiSignalStrengthIndBm() {
        WifiInfo wifiInfo = wifimanager.getConnectionInfo();

        return wifiInfo.getRssi();
    }
 public void checkstrength(int wifi,int mobile)
    {

        if(wifi!=0 && mobile!=0)
        {

           if(wifi<mobile){
              response="-2";

              wifimanager.setWifiEnabled(false);
              InternetControl.EnableInternet(getApplicationContext());

                          }
        }
        else if(wifi==0&&mobile<=-111)
        {
             response="-3";
            message="signal Strength is too weak";
        }
    }


@Override
public void onDestroy() {
    handler.removeCallbacks(sendNetworkStatus);
     Thread.currentThread().interrupt();
    unregisterReceiver(mReceiver);
    Toast.makeText(getBaseContext(), "service is destroy", Toast.LENGTH_LONG).show();
    super.onDestroy();
}

并记录cat error

09-04 12:46:33.249: E/AndroidRuntime(4177): FATAL EXCEPTION: main
09-04 12:46:33.249: E/AndroidRuntime(4177): java.lang.RuntimeException: Unable to start service com.example.data_connection_monitor.StatusChecker@415923f8 with null: java.lang.NullPointerException
09-04 12:46:33.249: E/AndroidRuntime(4177):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2390)
09-04 12:46:33.249: E/AndroidRuntime(4177):     at android.app.ActivityThread.access$1900(ActivityThread.java:128)
09-04 12:46:33.249: E/AndroidRuntime(4177):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1224)
09-04 12:46:33.249: E/AndroidRuntime(4177):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 12:46:33.249: E/AndroidRuntime(4177):     at android.os.Looper.loop(Looper.java:137)
09-04 12:46:33.249: E/AndroidRuntime(4177):     at android.app.ActivityThread.main(ActivityThread.java:4517)
09-04 12:46:33.249: E/AndroidRuntime(4177):     at java.lang.reflect.Method.invokeNative(Native Method)
09-04 12:46:33.249: E/AndroidRuntime(4177):     at java.lang.reflect.Method.invoke(Method.java:511)
09-04 12:46:33.249: E/AndroidRuntime(4177):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
09-04 12:46:33.249: E/AndroidRuntime(4177):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
09-04 12:46:33.249: E/AndroidRuntime(4177):     at dalvik.system.NativeStart.main(Native Method)
09-04 12:46:33.249: E/AndroidRuntime(4177): Caused by: java.lang.NullPointerException
09-04 12:46:33.249: E/AndroidRuntime(4177):     at com.example.data_connection_monitor.StatusChecker.onStart(StatusChecker.java:77)
09-04 12:46:33.249: E/AndroidRuntime(4177):     at android.app.Service.onStartCommand(Service.java:438)
09-04 12:46:33.249: E/AndroidRuntime(4177):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2373)
09-04 12:46:33.249: E/AndroidRuntime(4177):     ... 10 more

请帮帮我。我是android新手。 在此先感谢!!!!!!!!

0 个答案:

没有答案