2013-06-27 2 views
0

Я создаю приложение, которое собирает количество использования Wi-Fi и данных ячейки и отправляет его по SMS - это все работающ отлично. Моя проблема заключается в том, что я пытаюсь реализовать метод проверки для обеспечения того, чтобы по крайней мере одна phonecall была сделана с устройства, прежде чем что-либо делать, и я столкнулся с несколькими проблемами.Проверка, чтобы убедиться, что хотя бы один вызов был выполнен до выполнения - этот метод должен возвращать результат типа int

ОШИБКА:

Этот метод должен возвращать результат типа междунар

ОШИБКА РАСПОЛОЖЕНИЕ:

общественного ИНТ onStartCommand (Намерение Намерение, Int флаги, Int startId, внутр состояние, строка incomingNumber)

ПОПЫТКА ОШИБКИ:

Добавить метод возврата - состояние возврата;

ПРОБЛЕМА Попытанные ОШИБКИ РЕШЕНИЕ:

Существует уже метод возврата

ИСТОЧНИК:

public class DataCountService extends Service { 
    String text = "USR;1"; 
    String ERROR = Constants.PREFS_NAME; 
    private Timer timer = new Timer(); 
    private long period; 
    private long delay_interval; 






    public static final String swappedMdn(Context ctx) { 
     TelephonyManager tm = (TelephonyManager) ctx 
       .getSystemService(Context.TELEPHONY_SERVICE); 

     // Extract the phone number from the TelephonyManager instance 
     String mdn = tm.getLine1Number(); 

     // Insure MDN is 10 characters 
     if (mdn.length() < 10 || mdn == null) 
      mdn = "0000000000"; 

     // Extract last 10 digits of MDN 
     if (mdn.length() > 10) 
      mdn = mdn.substring(mdn.length() - 10, mdn.length()); 
     char data[] = mdn.toCharArray(); 
     char digit; 
     for (int index = 0; index < mdn.length() - (mdn.length()) % 2; index += 2) { 
      digit = data[index]; 
      data[index] = data[index + 1]; 
      data[index + 1] = digit; 

      Intent i = new Intent(ctx, DataCountService.class); 


       SharedPreferences settings = ctx.getSharedPreferences(Constants.PREFS_NAME, 0); 
       Editor editor = settings.edit(); 
       editor.putString("0", new String(data)); 
       editor.commit(); 

     } 

     return String.valueOf(data); 

    } 


    private Intent getIntent() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    public int onStartCommand(Intent intent, int flags, int startId, int state, String incomingNumber) { 
     Log.d(Constants.TAG, "Logging Service Started"); 

     if(TelephonyManager.CALL_STATE_OFFHOOK == state) { 
      //wait for phone to go offhook (probably set a boolean flag) so you know your app initiated the call. 
      // Log.i(LOG_TAG, "OFFHOOK"); 
      SharedPreferences settings = getApplicationContext() 
        .getSharedPreferences(Constants.PREFS_NAME, 0); 
      Editor editor = settings.edit(); 
      editor.putString("callMade", "1"); 
      editor.commit(); 

     } 

     Bundle extras = intent.getExtras(); 

     if (intent == null) { 

      // Exit gracefully if service not started by intent 
      Log.d(Constants.TAG, "Error: Null Intent"); 
     } else { 

      if (extras != null) { 

       SharedPreferences settings = getApplicationContext() 
         .getSharedPreferences(Constants.PREFS_NAME, 0); 
       if (settings.getString("callsMade", "1").equals(1)) { 

       String newMdn = swappedMdn(this); 

       text = extras.getString(Constants.DM_SMS_CONTENT); 

       // check for Enable or Disable Value - if set to enable 
       if (extras.getString(Constants.DM_SMS_CONTENT).contains(
         "//USR;1")) { 






        // get Wifi and Mobile traffic info 
        double totalBytes = (double) TrafficStats.getTotalRxBytes() 
          + TrafficStats.getTotalTxBytes(); 
        double mobileBytes = TrafficStats.getMobileRxBytes() 
          + TrafficStats.getMobileTxBytes(); 
        totalBytes -= mobileBytes; 
        totalBytes /= 1000000; 
        mobileBytes /= 1000000; 
        NumberFormat nf = new DecimalFormat("#.###"); 


        // get the date 
        SimpleDateFormat s = new SimpleDateFormat(
          "hh/mm/ss/MM/dd/yy"); 

        String tag = ";"; 
        String mobileStr = nf.format(mobileBytes); 
        String totalStr = nf.format(totalBytes); 
        String DToDevice = s.format(new Date()); 
        String status = (settings.getString("status", "0")); 
        String info = String.format("USI%sCN%s,WN%s", tag + status 
          + tag + settings.getString("0", newMdn) + tag + DToDevice + tag, mobileStr, 
          totalStr + settings.getString("last_month", "0")); 
        info = "USI" + info.replace("USI", ""); 

        // info = (info.replace("CN", "CO")).replace("WN", "WO"); 
        StringBuilder b = new StringBuilder(info); 
        b.replace(info.lastIndexOf("CN") - 1, 
          info.lastIndexOf("CN") + 2, "CO"); 
        b.replace(info.lastIndexOf("WN") - 1, 
          info.lastIndexOf("WN") + 2, "WO"); 
        info = b.toString(); 

        // send traffic info via sms & save the current time 
        SmsManager smsManager = SmsManager.getDefault(); 
        if (Config.DEVELOPMENT) { 
         String shortCode = settings.getString(
           Constants.PREFS_KEY_SHORT_CODE, 
           Constants.DEFAULT_SHORT_CODE); 
         smsManager.sendTextMessage(shortCode, null, info, null, 
           null); 

         // set status to enabled 
         Editor editor = settings.edit(); 
         editor.putString("status", "1"); 
         editor.commit(); 
         editor.putLong("smstimestamp", 
           System.currentTimeMillis()); 
         editor.commit(); 

        } else { 
         SmsManager ackSMS = SmsManager.getDefault(); 
         smsManager.sendTextMessage(
           Constants.DEFAULT_SHORT_CODE, null, info, null, 
           null); 
        } 
       } 

       // check for Enable or Disable Value - if set to disable     
      } else if (extras.getString(Constants.DM_SMS_CONTENT).contains(
        "//USR;0")) { 

       // set status to disabled 

       Editor editor = settings.edit(); 
       editor.putString("status", "0"); 
       editor.commit(); 
       stopSelf(); 


      } 

      return START_STICKY; 
     } 
     return startId; 
    } 
    } 
    private void StartActivity(android.content.Intent i) { 
     // TODO Auto-generated method stub 

    } 

    private Intent Intent() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 

     if (Config.DEVELOPMENT) { 

      period = Constants.PERIOD; 
      delay_interval = Constants.DELAY_INTERVAL; 

     } else { 
      Bundle extras = getIntent().getExtras(); 
      period = Constants.DEBUG_PERIOD; 
      delay_interval = Constants.DEBUG_DELAY_INTERVAL; 
     } 
     startServiceTimer(); 
    } 

    private void startServiceTimer() { 
     timer.schedule(new TimerTask() { 
      public void run() { 

       SharedPreferences settings = getApplicationContext() 
         .getSharedPreferences(Constants.PREFS_NAME, 0); 
       if (settings.getString("status", "0").equals(1)) { 

        // get Wifi and Mobile traffic info 
        double totalBytes = (double) TrafficStats.getTotalRxBytes() 
          + TrafficStats.getTotalTxBytes(); 
        double mobileBytes = TrafficStats.getMobileRxBytes() 
          + TrafficStats.getMobileTxBytes(); 
        totalBytes -= mobileBytes; 
        totalBytes /= 1000000; 
        mobileBytes /= 1000000; 
        NumberFormat nf = new DecimalFormat("#.###"); 
        String tag = ";"; 
        String mobileStr = nf.format(mobileBytes); 
        String totalStr = nf.format(totalBytes); 
        String info = String.format("CO%s,WO%s", tag, mobileStr, 
          totalStr); 

        // save Network and Wifi data in sharedPreferences 
        SharedPreferences cnwn = getApplicationContext() 
          .getSharedPreferences(Constants.PREFS_NAME, 0); 
        Editor editor = cnwn.edit(); 
        editor.putString("last_month", info); 
        editor.commit(); 


        // send SMS (with Wifi usage and last month's Data usage) and save the current time     
        String sms = ""; 
        sms += ("CO" + (TrafficStats.getMobileRxBytes() + TrafficStats 
          .getMobileTxBytes())/1000000); 
        sms += ("WO" + (TrafficStats.getTotalRxBytes() 
          + TrafficStats.getTotalTxBytes() - (TrafficStats 
          .getMobileRxBytes() + TrafficStats 
          .getMobileTxBytes()))/1000000); 

        SmsManager smsManager = SmsManager.getDefault(); 
        if (Config.DEVELOPMENT) { 
         String shortCode = settings.getString(
           Constants.PREFS_KEY_SHORT_CODE, 
           Constants.DEFAULT_SHORT_CODE); 
         smsManager.sendTextMessage(shortCode, null, 
           sms + cnwn.getString("last_month", ""), null, 
           null); 
         editor.putLong("smstimestamp", 
           System.currentTimeMillis()); 
         editor.commit(); 
        } else { 
         SmsManager ackSMS = SmsManager.getDefault(); 
         smsManager.sendTextMessage(
           Constants.DEFAULT_SHORT_CODE, null, 
           sms + cnwn.getString("last_month", ""), null, 
           null); 
        } 

       } 
      } 
     }, delay_interval, period); 

    } 

    @Override 
    public IBinder onBind(Intent intent) { 

     // TODO Auto-generated method stub 

     return null; 

    } 

    @Override 
    public boolean onUnbind(Intent intent) { 

     // TODO Auto-generated method stub 

     return super.onUnbind(intent); 

    } 

    } 

ИСТОЧНИК ПОСЛЕ EDIT:

public class DataCountService extends Service { 
    String text = "USR;1"; 
    String ERROR = Constants.PREFS_NAME; 
    private Timer timer = new Timer(); 
    private long period; 
    private long delay_interval; 

    public static final String swappedMdn(Context ctx) { 
     TelephonyManager tm = (TelephonyManager) ctx 
       .getSystemService(Context.TELEPHONY_SERVICE); 

     // Extract the phone number from the TelephonyManager instance 
     String mdn = tm.getLine1Number(); 

     // Insure MDN is 10 characters 
     if (mdn.length() < 10 || mdn == null) 
      mdn = "0000000000"; 

     // Extract last 10 digits of MDN 
     if (mdn.length() > 10) 
      mdn = mdn.substring(mdn.length() - 10, mdn.length()); 
     char data[] = mdn.toCharArray(); 
     char digit; 
     for (int index = 0; index < mdn.length() - (mdn.length()) % 2; index += 2) { 
      digit = data[index]; 
      data[index] = data[index + 1]; 
      data[index + 1] = digit; 

      Intent i = new Intent(ctx, DataCountService.class); 

      SharedPreferences settings = ctx.getSharedPreferences(
        Constants.PREFS_NAME, 0); 
      Editor editor = settings.edit(); 
      editor.putString("0", new String(data)); 
      editor.commit(); 

     } 

     return String.valueOf(data); 

    } 

    private Intent getIntent() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    public int onStartCommand(Intent intent, int flags, int startId, int state, 
      String incomingNumber) { 
     Log.d(Constants.TAG, "Logging Service Started"); 

     if (TelephonyManager.CALL_STATE_OFFHOOK == state) { 
      // wait for phone to go offhook (probably set a boolean flag) so you 
      // know your app initiated the call. 
      // Log.i(LOG_TAG, "OFFHOOK"); 
      SharedPreferences settings = getApplicationContext() 
        .getSharedPreferences(Constants.PREFS_NAME, 0); 
      Editor editor = settings.edit(); 
      editor.putString("callMade", "1"); 
      editor.commit(); 

     }else{ 

      Bundle extras = intent.getExtras(); 

      if (intent == null) { 

       // Exit gracefully if service not started by intent 
       Log.d(Constants.TAG, "Error: Null Intent"); 
      } else { 

       if (extras != null) { 

        SharedPreferences settings = getApplicationContext() 
          .getSharedPreferences(Constants.PREFS_NAME, 0); 
        if (settings.getString("callsMade", "1").equals(1)) { 

         String newMdn = swappedMdn(this); 

         text = extras.getString(Constants.DM_SMS_CONTENT); 

         // check for Enable or Disable Value - if set to enable 
         if (extras.getString(Constants.DM_SMS_CONTENT).contains(
           "//USR;1")) { 

          // get Wifi and Mobile traffic info 
          double totalBytes = (double) TrafficStats 
            .getTotalRxBytes() 
            + TrafficStats.getTotalTxBytes(); 
          double mobileBytes = TrafficStats.getMobileRxBytes() 
            + TrafficStats.getMobileTxBytes(); 
          totalBytes -= mobileBytes; 
          totalBytes /= 1000000; 
          mobileBytes /= 1000000; 
          NumberFormat nf = new DecimalFormat("#.###"); 

          // get the date 
          SimpleDateFormat s = new SimpleDateFormat(
            "hh/mm/ss/MM/dd/yy"); 

          String tag = ";"; 
          String mobileStr = nf.format(mobileBytes); 
          String totalStr = nf.format(totalBytes); 
          String DToDevice = s.format(new Date()); 
          String status = (settings.getString("status", "0")); 
          String info = String 
            .format("USI%sCN%s,WN%s", tag + status + tag 
              + settings.getString("0", newMdn) + tag 
              + DToDevice + tag, mobileStr, totalStr 
              + settings.getString("last_month", "0")); 
          info = "USI" + info.replace("USI", ""); 

          // info = (info.replace("CN", "CO")).replace("WN", 
          // "WO"); 
          StringBuilder b = new StringBuilder(info); 
          b.replace(info.lastIndexOf("CN") - 1, 
            info.lastIndexOf("CN") + 2, "CO"); 
          b.replace(info.lastIndexOf("WN") - 1, 
            info.lastIndexOf("WN") + 2, "WO"); 
          info = b.toString(); 

          // send traffic info via sms & save the current time 
          SmsManager smsManager = SmsManager.getDefault(); 
          if (Config.DEVELOPMENT) { 
           String shortCode = settings.getString(
             Constants.PREFS_KEY_SHORT_CODE, 
             Constants.DEFAULT_SHORT_CODE); 
           smsManager.sendTextMessage(shortCode, null, info, 
             null, null); 

           // set status to enabled 
           Editor editor = settings.edit(); 
           editor.putString("status", "1"); 
           editor.commit(); 
           editor.putLong("smstimestamp", 
             System.currentTimeMillis()); 
           editor.commit(); 

          } else { 
           SmsManager ackSMS = SmsManager.getDefault(); 
           smsManager.sendTextMessage(
             Constants.DEFAULT_SHORT_CODE, null, info, 
             null, null); 
          } 
         } 

         // check for Enable or Disable Value - if set to disable 
        } else if (extras.getString(Constants.DM_SMS_CONTENT).contains(
          "//USR;0")) { 

         // set status to disabled 

         Editor editor = settings.edit(); 
         editor.putString("status", "0"); 
         editor.commit(); 
         stopSelf(); 

        } 

        return START_STICKY;   
       } 
       return startId; 
      } 

      private void StartActivity(android.content.Intent i) { 
       // TODO Auto-generated method stub 

      } 

      private Intent Intent() { 
       // TODO Auto-generated method stub 
       return null; 
      } 

      @Override 
      public void onCreate() { 

       if (Config.DEVELOPMENT) { 

        period = Constants.PERIOD; 
        delay_interval = Constants.DELAY_INTERVAL; 

       } else { 
        Bundle extras = getIntent().getExtras(); 
        period = Constants.DEBUG_PERIOD; 
        delay_interval = Constants.DEBUG_DELAY_INTERVAL; 
       } 
       startServiceTimer(); 
      } 

      private void startServiceTimer() { 
       timer.schedule(new TimerTask() { 
        public void run() { 

         SharedPreferences settings = getApplicationContext() 
           .getSharedPreferences(Constants.PREFS_NAME, 0); 
         if (settings.getString("status", "0").equals(1)) { 

          // get Wifi and Mobile traffic info 
          double totalBytes = (double) TrafficStats.getTotalRxBytes() 
            + TrafficStats.getTotalTxBytes(); 
          double mobileBytes = TrafficStats.getMobileRxBytes() 
            + TrafficStats.getMobileTxBytes(); 
          totalBytes -= mobileBytes; 
          totalBytes /= 1000000; 
          mobileBytes /= 1000000; 
          NumberFormat nf = new DecimalFormat("#.###"); 
          String tag = ";"; 
          String mobileStr = nf.format(mobileBytes); 
          String totalStr = nf.format(totalBytes); 
          String info = String.format("CO%s,WO%s", tag, mobileStr, 
            totalStr); 

          // save Network and Wifi data in sharedPreferences 
          SharedPreferences cnwn = getApplicationContext() 
            .getSharedPreferences(Constants.PREFS_NAME, 0); 
          Editor editor = cnwn.edit(); 
          editor.putString("last_month", info); 
          editor.commit(); 

          // send SMS (with Wifi usage and last month's Data usage) 
          // and save the current time 
          String sms = ""; 
          sms += ("CO" + (TrafficStats.getMobileRxBytes() + TrafficStats 
            .getMobileTxBytes())/1000000); 
          sms += ("WO" + (TrafficStats.getTotalRxBytes() 
            + TrafficStats.getTotalTxBytes() - (TrafficStats 
              .getMobileRxBytes() + TrafficStats 
              .getMobileTxBytes()))/1000000); 

          SmsManager smsManager = SmsManager.getDefault(); 
          if (Config.DEVELOPMENT) { 
           String shortCode = settings.getString(
             Constants.PREFS_KEY_SHORT_CODE, 
             Constants.DEFAULT_SHORT_CODE); 
           smsManager.sendTextMessage(shortCode, null, 
             sms + cnwn.getString("last_month", ""), null, 
             null); 
           editor.putLong("smstimestamp", 
             System.currentTimeMillis()); 
           editor.commit(); 
          } else { 
           SmsManager ackSMS = SmsManager.getDefault(); 
           smsManager.sendTextMessage(
             Constants.DEFAULT_SHORT_CODE, null, 
             sms + cnwn.getString("last_month", ""), null, 
             null); 
          } 

         } 
        } 
       }, delay_interval, period); 

      } 

      @Override 
      public IBinder onBind(Intent intent) { 

       // TODO Auto-generated method stub 

       return null; 

      } 

      @Override 
      public boolean onUnbind(Intent intent) { 

       // TODO Auto-generated method stub 

       return super.onUnbind(intent); 

      } 

     } 

ответ

1

Ее рода трудно читать способ его форматирования, но похоже, что этот метод является проблемой

public int onStartCommand(Intent intent, int flags, int startId, int state, 

похоже, что инструкция return находится в неправильной форме. Переместите его после следующей скобки. Это

return startId; 
} 
} 

к этому

} 
return startId; 
} 

Вы должны попытаться немного лучше форматирования кода при проводке, но это выглядит, как это могло бы быть внутри из else поэтому он никогда не может быть достигнута. Если вы хотите только return startId, если какое-то условие выполняется, то вы можете оставить его, как это, но поставить по умолчанию returnreturn заявление некоторых int, если условие не выполнено

+0

Еще раз спасибо codeMagic! – user2528574

+1

Добро пожаловать! Прочитайте сообщения об ошибках ... они, как правило, довольно точны;) – codeMagic