在Android应用中检测开机状态时引入时间延迟

时间:2014-05-21 14:07:30

标签: android timer delay

Heyy!

我正在创建一个测试应用程序,用于检测设备是否连接到任何电源,并相应地显示状态为"充电"或者"放电"。直到这里工作得非常好。 现在我想要的是,当我取下电源时,它应该显示"放电"经过了10秒钟的延迟。在这10秒内,如果说,我重新连接电源,该应用程序不会更新其状态并保持在"充电"州。 我想保持延迟时间可配置。 我该怎么做? 这是迄今为止使用的代码段。它会毫不拖延地显示设备的状态。

        BroadcastReceiver br = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context , Intent intent) {


        if(Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())){


            int btstatus = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
            switch(btstatus)
            {
            case 1:
                status="Unknown";
                break;

            case 2:
                status="Charging";
                break;

            case 3:
                status="Discharging";
                break;

            case 4:
                status="Not charging";
                break;

            case 5:
                status="Battery Full";
                break;

                default: status= "Error!";

            }

                     tv2.setText(status);


//OnCreate method
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_main);
    tv1= (TextView)findViewById(R.id.textView1);
    tv2=(TextView)findViewById(R.id.textView2);

     registerReceiver(br, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));



}
//onDestroy()
@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    unregisterReceiver(br);
      super.onDestroy();  


}

1 个答案:

答案 0 :(得分:0)

    new AsyncTask() {
        @Override
        protected Object doInBackground(Object[] params) {
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        }

        @Override
        protected void onPostExecute(Object o) {
            // call a method that changes the state; don't change the state here, do it on the UI thread
        }
    }.execute();