2014-07-10 3 views
1

나는 배터리 낮은 방송 수신기를 등록했습니다. 이안드로이드에 방송 수신기를 등록하십시오

import com.save.sharedpreference.SharedPreference; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.SmsManager; 
import android.widget.Toast; 

public class BootReceiver extends BroadcastReceiver { 

    String user_phone_key = "phone_number"; 
    int last_level = 0; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     int rlevel = intent.getIntExtra("level", -1); 
     int scale = intent.getIntExtra("scale", -1); 
     int level = -1; 
     if (rlevel >= 0 && scale > 0) { 
      level = (rlevel * 100)/scale; 

     } 

     if (level == 48 && last_level == level + 1) { 

      SharedPreference save_data = new SharedPreference(
        context.getApplicationContext()); 
      String phone = save_data.get_string(user_phone_key, null); 
      Toast.makeText(context, "Level Decrease", Toast.LENGTH_SHORT) 
        .show(); 

      try { 
       SmsManager smsManager = SmsManager.getDefault(); 
       smsManager.sendTextMessage(phone, null, 
         "Your Battery level is less ", null, null); 

      } catch (Exception e) { 
       Toast.makeText(context.getApplicationContext(), 
         "SMS faild, please try again later!", Toast.LENGTH_LONG) 
         .show(); 
       e.printStackTrace(); 
      } 

     } 
     last_level = level + 1; 

    } 
} 

그것처럼 는 잘 작동하지만 내 배터리 잔량이 나를 보내기 시작 45 %는 45 %에서 배터리 레벨 변경 될 때까지 SMS를 도달 할 때 문제입니다. 내 배터리 레벨이 45 %에 도달하면 배터리 레벨이 45 % 일 때 단지 한 번만 SMS를 보내고 다시 기다리고 싶습니다. 가능합니까? 도움주세요.

답변

1

로컬 변수를 사용할 수 있습니까?

public class BootReceiver extends BroadcastReceiver { 

    String user_phone_key = "phone_number"; 
    int last_level = 0; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     int rlevel = intent.getIntExtra("level", -1); 
     int scale = intent.getIntExtra("scale", -1); 
     int level = -1; 
     if (rlevel >= 0 && scale > 0) { 
      level = (rlevel * 100)/scale; 
     } 
     if (level == 45 && last_level == 46) { 

     ... 

     last_level = level; 
    } 
} 

나는 이것이 가장 우아한 해결책은 아니지만 잘 작동한다는 것을 알고 있습니다.

ACTION_BATTERY_LOW 의도를 사용하면 충전량이 감소하는 경향이 있습니다. IIRC는 배터리가 부족한 경우에만 한 번만 충전됩니다. 배터리 잔량이 45 %를 감지해야하는 이유가 있습니까?

+0

답장을 보내 주셔서 감사합니다. 예. 배터리 임계 값을 사용자 입력으로 사용하고 배터리 수준이 정의 임계 값과 같을 때 사용자에게 경고하고 싶습니다. 이 작업을 수행하는 방법은 무엇입니까? – Bilal

+0

예. 사용자의 입력을 얻을 수있는 방법이 필요하지만 45와 46을 alert_level 및 alert_level + 1로 바꿀 수 있습니다 ... –

+0

사용자로부터 입력을 받고 45 %를 입력하는 것처럼 내 브로드 캐스트 수신기가 계속 전송하므로 배터리 잔량이 적음을 알려주는 메시지입니다. 에서 45 %로 변경됩니다. 어떻게 처리 할 수 ​​있습니까? 메시지를 한 번에 받고 싶습니다. 배터리 잔량이 45 %가 될 때까지 다시 보류합니다. – Bilal

1

boolean isMsgSent=false; 

once.Like- 메시지를 보내고 배터리 잔량이 45

때 루프

if(level==45 && !isMsgSent){ 
// send Msg 
isMsgSent=true; 
} 
else{ 
isMsgSent=false; 
} 
된 직후 그것은 한 번만 메시지를 보낼 경우 수정할 부울 변수를 만듭니다
관련 문제