Tổng hợp Cảm biến ánh - Sensor sáng trong ứng dụng android

Thảo luận trong 'Android cơ bản' bắt đầu bởi thanhlong90.it, 20/10/13.

  1. thanhlong90.it

    thanhlong90.it Admin Support

    Lượt xem: 19,916
    Chào các bạn hôm nay Long sẽ giới thiệu đến các bạn một cảm trong những cảm biến trên các smartphone. Đó chính là cảm biến ánh sáng, chắc hẳn rất nhiều bạn là không biết sự tồn tại của cảm biến này là nguyên nhân một số ứng dụng chuyển sang tối và sáng đột ngột. Nguyên nhân cũng một phần là do ứng dụng đọc được thông số sáng tối của môi trường xung quanh thiết bị, và nó sẽ tự động chuyển độ sáng màn hình cho phù hợp.

    1) Source code demo lập trình android:
    - Click vào đây để download source code demo

    2) Sensor là gì:
    - Sensor là một đối tượng được thêm vào android từ phiên bản android level 3 và còn hỗ trợ cho đến nay (android level 18).
    - Dựa vào cảm biến ánh sáng trên thiết bị của các smartphone thì nó sẽ trả về độ sáng tương ứng.
    - Độ sáng nhỏ nhất là 0 và lớn nhất tùy vào mỗi loại cảm biến. Để check độ sáng lớn nhất có thể đo được ta có thể sử dụng đoạn code sau
    PHP:
    public float getMaximumRange ()
     
    #Returns
    maximum range of the sensor in the sensor's unit.
    3) Video hướng dẫn:


    4) Hướng dẫn code:
    - res/values/strings.xml
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
     
        <string name="app_name">DemaAndroidLightSenser</string>
        <string name="action_settings">Settings</string>
        <string name="hello_world">Hello world!</string>
        <string name="exit">Thoat</string>
        <string name="parsed_data">http://android.vn\nHướng dẫn bởi thanhlong90.it</string>
     
    </resources>
    - activity_main.xml
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
     
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:gravity="center"
            android:text="@string/parsed_data"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textStyle="bold" />
     
        <TextView
            android:id="@+id/current"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:paddingLeft="40dp" />
     
        <TextView
            android:id="@+id/bright"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="40dp"
            android:paddingLeft="40dp" />
     
        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginBottom="20dp"
            android:paddingLeft="40dp" >
     
            <Button
                android:id="@+id/btExit"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:text="@string/exit" />
        </RelativeLayout>
     
    </LinearLayout>
    - MainActivity.java
    PHP:
    package thanhlong90.it.demaandroidlightsenser;
     
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Context;
    import android.util.Log;
    import android.view.View;
    import android.view.WindowManager;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
     
    public class 
    MainActivity extends Activity {
     
        private 
    TextView textBrightCurrent;
        private 
    Button exit;
        private 
    float lightValue 0.5f;
        private 
    WindowManager.LayoutParams layoutParams;
     
        @
    Override
        
    public void onCreate(Bundle savedInstanceState) {
            
    super.onCreate(savedInstanceState);
            
    setContentView(R.layout.activity_main);
         
            
    layoutParams getWindow().getAttributes();
         
            
    textBrightCurrent = (TextViewfindViewById(R.id.current);
            exit = (
    ButtonfindViewById(R.id.btExit);
            
    setBright(lightValue);
         
            exit.
    setOnClickListener(new OnClickListener() {
                @
    Override
                
    public void onClick(View v) {
                    
    finish();
                }
            });
         
            
    SensorManager sensorManager = (SensorManagergetSystemService(Context.SENSOR_SERVICE);
            
    Sensor lightSensor sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
     
            if (
    lightSensor == null) {
                
    Toast.makeText(MainActivity.this"No Light Sensor!"Toast.LENGTH_LONG).show();
            } else {
                
    float max lightSensor.getMaximumRange();
                
    Log.v("Bright","Bright Max: " String.valueOf(max));
                
    sensorManager.registerListener(lightSensorEventListenerlightSensorSensorManager.SENSOR_DELAY_NORMAL);
            }
        }
     
        
    SensorEventListener lightSensorEventListener = new SensorEventListener() {
            @
    Override
            
    public void onAccuracyChanged(Sensor sensorint accuracy) {
     
            }
     
            @
    Override
            
    public void onSensorChanged(SensorEvent event) {
                if (
    event.sensor.getType() == Sensor.TYPE_LIGHT) {
                    
    float currentReading event.values[0];
                    
    textBrightCurrent.setText("Độ sáng hiện tại: " String.valueOf(currentReading));
                }
            }
        };
     
        public 
    void setBright(float lightValue){
            if(
    lightValue && lightValue <= 1){
                
    layoutParams.screenBrightness lightValue;
                
    getWindow().setAttributes(layoutParams);
            }
        }
    }
    5) Chú ý:
    - Kiểm tra thiết bị có hỗ trợ cảm biến ánh sáng hay không.
    - Nguồn android: http://developer.android.com/reference/android/hardware/Sensor.html

    6) Hình ảnh kết quả demo:
    device-2013-10-20-151040

    Bài viết đăng lên diễn đàn khác vui lòng ghi rõ nguồn: Android.vn
    Pass giải nén: http://android.vn
    Support:
    - Skype: thanhlong90.it.support
    - Gmail: thanhlong90.it@gmail.com
    Chúc các bạn thành công!
    cảm biến, ánh sáng, sensor, thanhlong90.it, cảm biến ánh sáng, hướng dẫn, ví dụ, demo, tutorial, example
  2. luong.it

    luong.it New Member

    mở hàng ngay nào. thanks a Long :D
  3. Martimillion

    Martimillion New Member

    Giá trị max của no là bao nhiêu nhỉ :-?
  4. thanhlong90.it

    thanhlong90.it Admin Support Staff Member

    Bạn vui lòng đọc lại kỹ phần số 2!

Chia sẻ trang này