• 用广播监听安卓设备电量状态


    header_battery_level_article

    这次邮件我们将会讨论怎么获取电量状态在安卓设备上,为了完成这个目标,我们将会使用到广播。

    What is BroadcastReceiver?
    A broadcast receiver is an Android component which allows you to register for system or application events. All registered receivers for an event are notified by the Android application.

    The system itself broadcast event all time, as example when system gets booted or an SMS arrived, etc.

    Application description
    Application display of battery level and update this value when battery level changed.
    battery_level_screen

    在Android Studio 中新建一个工程


    Create a project in Android Studio step1

    Create a project in Android Studio step2

    Create a project in Android Studio step3

    Create a project in Android Studio step3

    在String.xml中添加一个常量

    1. <string name="battery_level">Battery level:</string>
      

        

    更新布局文件,在这里我叫 “activity_main.xml”

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:orientation="vertical"
        tools:context=".MainActivity">
    
        <TextView
            android:id="@+id/textView"
            android:text="@string/battery_level"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
        <ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_marginTop="8dp"
            android:layout_marginLeft="12dp"
            android:layout_marginRight="12dp"
            android:max="100"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/textView"
            android:layout_toRightOf="@+id/textView"
            android:layout_toEndOf="@+id/textView" />
    
    </LinearLayout>

    创建一个内部类为我们的广播实现


    private class BatteryBroadcastReceiver extends BroadcastReceiver {
    
        private final static String BATTERY_LEVEL = "level";
    
        @Override
        public void onReceive(Context context, Intent intent) {
            int level = intent.getIntExtra(BATTERY_LEVEL, 0);
    
            mBatteryLevelText.setText(getString(R.string.battery_level) + " " + level);
            mBatteryLevelProgress.setProgress(level);
        }
    }

    更新Activity的代码如下:

    public class MainActivity extends Activity {
    
        private TextView mBatteryLevelText;
        private ProgressBar mBatteryLevelProgress;
        private BroadcastReceiver mReceiver;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mBatteryLevelText = (TextView) findViewById(R.id.textView);
            mBatteryLevelProgress = (ProgressBar) findViewById(R.id.progressBar);
    
            mReceiver = new BatteryBroadcastReceiver();
    
            registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
        }
    
        @Override
        protected void onStop() {
            unregisterReceiver(mReceiver);
            super.onStop();
        }
    
        private class BatteryBroadcastReceiver extends BroadcastReceiver {
    
            private final static String BATTERY_LEVEL = "level";
    
            @Override
            public void onReceive(Context context, Intent intent) {
                int level = intent.getIntExtra(BATTERY_LEVEL, 0);
    
                mBatteryLevelText.setText(getString(R.string.battery_level) + " " + level);
                mBatteryLevelProgress.setProgress(level);
            }
        }
    }
    我们必须反注册你的接收者当activity 停止,因为如果不反注册,当你的应用程序关闭时候,进程会一直在后台接受一些信息

     注册广播:

    We can register receiver in AndroidManifest.xml:
    
    <receiver android:name="BatteryBroadcastReceiver" >
    <intent-filter>
    <action android:name="android.intent.action.BATTERY_CHANGED" />
    </intent-filter>
    </receiver>

    or register our BroadcastReceiver in application
    BatteryBroadcastReceiver mReceiver = new BatteryBroadcastReceiver();
    registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

    运行程序
    We can change battery level of our emulator use console. We must connect to out AVD Emulator use console / terminal. If we run many emulator, each emulator will have unique port. Port number your emulator you can find in title of emulator window. As example port of my emulator is 5554.
    Connect to emulator:
    1. telnet localhost <PORT>

    Change battery level of emulator:
    1. power capacity <BATTERY_LEVEL_IN_PERCENT>

    Change battery level to 50% use terminal
    Next step is change battery level on emulator.
     Change battery level to 12% use terminal
    As you can see TextView and ProgressBar were updated.
     
     
    from:http://alexzh.com/tutorials/android-battery-status-use-broadcastreceiver/?utm_source=Android+Weekly&utm_campaign=bce41f280c-Android_Weekly_149&utm_medium=email&utm_term=0_4eb677ad19-bce41f280c-337902977
  • 相关阅读:
    luogu2394 yyy loves Chemistry I
    luogu2393 yyy loves Maths II
    2018年01月刷题学习日记
    luogu2590 [ZJOI2008]树的统计
    HDU 2087 剪花布条
    HDU 1686 Oulippo
    HDU 1711 Number Sequence(KMP模板)
    HDU 3336 Count the String(KMP+DP)
    UVa 1614 奇怪的股市
    UVa 12174 Shuffle(滑动窗口)
  • 原文地址:https://www.cnblogs.com/spring87/p/4441468.html
Copyright © 2020-2023  润新知