1

Я пишу приложение для Android, чтобы постоянно следить за сетью в фоновом режиме после каждой минуты ... Я использую BroadcastReceiver ... он начинается, когда загрузка завершено .... и внутри BroadcastReceiver я делаю следующие вещиЗапуск BroadcastReceiver постоянно в фоновом режиме для мониторинга состояния сети.

 a. Monitor Network 
     b. check signal strength 
     c. fetch longitude and latitude 
     d. fetch phonenumber 
     e. fetch operatorname 

    and i am saving all the above information into a Database table.... 

, но, к сожалению, это приложение дает мне некоторые ошибки, когда я установить и запустить его на устройстве Android

мой BroadcastReceiver код: -

public class NetworkInfoReceiver extends BroadcastReceiver{ 

    private NetworkInfoVO networkInfoVO = new NetworkInfoVO(); 
    private String strNetworkInfo = QualityofServiceConstants.DEFAULT_NETWORK_INFO; 
    private SignalStrengthPhoneStateListner signalStrengthPhoneStateListner = new SignalStrengthPhoneStateListner(); 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Toast.makeText(context, "Started", Toast.LENGTH_SHORT).show(); 


     ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 

     NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 

       //Check Network status here 
     if(networkInfo!=null && networkInfo.isConnected()){ 
      String networkState = getNetworkStateString(networkInfo.getState()); 
      String stateString = networkInfo.toString().replace(',', '\n'); 
      strNetworkInfo = String.format("Network Type: %s\n Network State: %s\n\n %s", 
      networkInfo.getTypeName(),networkState,stateString); 
     } 

       //check signal strength here 
     telephonyManager.listen(signalStrengthPhoneStateListner, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 

     networkInfoVO.setNetworkInfo(strNetworkInfo); 
       //get phonenumber here 
     networkInfoVO.setPhoneNumber(telephonyManager.getLine1Number()); 
       //get operator name here 
     networkInfoVO.setServiceProvider(telephonyManager.getNetworkOperatorName()); 
//get signal strength here  networkInfoVO.setSignalStrength(signalStrengthPhoneStateListner.getSignalStrengths()); 
       //get latitude here 
     networkInfoVO.setLatitude(String.valueOf(getGPS(context).getLatitude())); 
       //get longitude here 
     networkInfoVO.setLongitude(String.valueOf(getGPS(context).getLongitude())); 
     networkInfoVO.setTime(new Date().toString()); 

     new NetworkInfoDatabaseHelper(context).saveRecord(networkInfoVO); 

     try { 
      Thread.sleep(60000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 


    private String getNetworkStateString(NetworkInfo.State state){ 

     String stateString = QualityofServiceConstants.NETWORK_STATE_UNKNOWN; 

     switch(state) 
     { 
     case CONNECTED: 
      stateString = QualityofServiceConstants.NETWORK_STATE_CONNECTED;    
      break; 

     case CONNECTING:   
      stateString = QualityofServiceConstants.NETWORK_STATE_CONNECTING;  
      break; 

     case DISCONNECTED:  
      stateString = QualityofServiceConstants.NETWORK_STATE_DISCONNECTED; 
      break; 

     case DISCONNECTING:  
      stateString = QualityofServiceConstants.NETWORK_STATE_DISCONNECTING; 
      break; 

     case SUSPENDED:   
      stateString = QualityofServiceConstants.NETWORK_STATE_SUSPENDED;    
      break; 

     default: 
      stateString = QualityofServiceConstants.NETWORK_STATE_UNKNOWN;  

      break; 

     } 

     return stateString; 
    } 


    private Location getGPS(Context context){ 

     LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
     List<String>providers = locationManager.getProviders(true); 
     Location location = null; 

     for (int i = providers.size()-1; i >= 0; i--){ 
      location = locationManager.getLastKnownLocation(providers.get(i)); 
      if(location!=null) 
       break; 
     } 

     return location; 
    } 

    private class SignalStrengthPhoneStateListner extends PhoneStateListener{ 

     private String signalStrengths; 

     @Override 
     public void onSignalStrengthsChanged(SignalStrength signalStrength) { 
      super.onSignalStrengthsChanged(signalStrength); 

      if(signalStrength.getGsmSignalStrength() > 30){ 
       signalStrengths = "Signal Strength :" + signalStrength.getGsmSignalStrength() + " Good"; 
      }else if(signalStrength.getGsmSignalStrength() > 20 && signalStrength.getGsmSignalStrength() < 30){ 
       signalStrengths = "Signal Strength : " + signalStrength.getGsmSignalStrength() + " Average"; 
      }else if(signalStrength.getGsmSignalStrength() < 20){ 
       signalStrengths = "Signal Strength : " + signalStrength.getGsmSignalStrength() + " Weak"; 
      } 

     } 

     public String getSignalStrengths() { 
      return signalStrengths; 
     } 

    } 

} 

мой манифест файл: -

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="compervazive.lognetworkinfo" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_CORSE_LOCATION"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <receiver android:name="com.example.qos.broadcastreceiver.NetworkInfoReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action._BOOT_COMPLETED"/> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
       <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> 
       <action android:name="android.net.wifi.STATE_CHANGE"/> 
       <action android:name="android.intent.action.SIG_STR"/>                                  
      </intent-filter> 

     </receiver> 
    </application> 

</manifest> 

пожалуйста, дайте мне знать, что проблема в этом .... Спасибо за ваше время :-)

+1

какие ошибки вы получаете? – damian

+0

Вы хотите, чтобы мы догадались, что такое ошибки или что? – Egor

+0

приложение не устанавливается ... я хочу, чтобы вы посмотрели файл манифеста ... и дайте мне знать, правильны ли все разрешения и фильтры намерений ... –

ответ

2
Thread.sleep(60000); 

Это очень плохая идея, удалите thi и перечитайте документацию BroadcastReceiver. Может быть, это поможет.

Также у вас нет активности в вашем манифесте. Добавьте, по крайней мере, одну основную операцию запуска. Любое приложение должно иметь хотя бы одно.

P.S. дайте нам больше информации об ошибках, которые вы получаете.

0
android.intent.action._BOOT_COMPLETED 

должны, вероятно, быть

android.intent.action.BOOT_COMPLETED 
Смежные вопросы