存档

‘code’ 分类的存档

Android下调用传感器(温度,亮度方向,地磁等,附源码)

2011年4月29日 sigma 5 条评论 21,686 views

装好Adroid SDK后,在sample的指导下,写了几个简单的类似hello world的程序,在这里介绍一下所写的在android下调用传感器的程序。

Android中支持的几种传感器:

Sensor.TYPE_ACCELEROMETER:加速度传感器。
Sensor.TYPE_GYROSCOPE:陀螺仪传感器。
Sensor.TYPE_LIGHT:亮度传感器。
Sensor.TYPE_MAGNETIC_FIELD:地磁传感器。
Sensor.TYPE_ORIENTATION:方向传感器。
Sensor.TYPE_PRESSURE:压力传感器。
Sensor.TYPE_PROXIMITY:近程传感器。
Sensor.TYPE_TEMPERATURE:温度传感器。

使用传感器最关键的一些知识是:SensorManager是所有传感器的一个综合管理类,包括了传感器的种类、采样率、精准度等。我们可以通过getSystemService方法来取得一个SensorManager对象。使用传感器时,需要通过registerListener函数注册传感器,使用完后需要通过unregisterListener取消注册。

百闻不如一见,还是直接讲代码:

新建一个Sensors的工程,创建一个Sensors.java,内容如下:

 package me.sigma.sensors;

import android.app.Activity;
import android.hardware.SensorListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;

public class Sensors extends Activity {
    TextView myTextView1;//t
    //gen
    TextView myTextView2;//x
    TextView myTextView3;//y
    TextView myTextView4;//z
    //acc
    TextView myTextView5;//x
    TextView myTextView6;//y
    TextView myTextView7;//z
   //ori
    TextView myTextView8;//x
    TextView myTextView9;//y
    TextView myTextView10;//z
    //Light
    TextView myTextView11;//z

    SensorManager  mySensorManager;//
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myTextView1 = (TextView) findViewById(R.id.myTextView1);
        myTextView2 = (TextView) findViewById(R.id.myTextView2);
        myTextView3 = (TextView) findViewById(R.id.myTextView3);
        myTextView4 = (TextView) findViewById(R.id.myTextView4);
        myTextView5 = (TextView) findViewById(R.id.myTextView5);
        myTextView6 = (TextView) findViewById(R.id.myTextView6);
        myTextView7 = (TextView) findViewById(R.id.myTextView7);
        myTextView8 = (TextView) findViewById(R.id.myTextView8);
        myTextView9 = (TextView) findViewById(R.id.myTextView9);
        myTextView10 = (TextView) findViewById(R.id.myTextView10);
        myTextView11 = (TextView) findViewById(R.id.myTextView11);
        mySensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    }
    private SensorListener mySensorListener = new SensorListener(){
    	@Override
    	public void onAccuracyChanged(int sensor, int accuracy) {}
    	@Override
    	public void onSensorChanged(int sensor, float[] values) {
    		if(sensor == SensorManager.SENSOR_TEMPERATURE){
    			myTextView1.setText("Current Temprature:"+values[0]);
    		}else if(sensor == SensorManager.SENSOR_MAGNETIC_FIELD){
    			myTextView2.setText("Current Magnetic x:"+values[0]);
    			myTextView3.setText("Current Magnetic y:"+values[1]);
    			myTextView4.setText("Current Magnetic z:"+values[2]);
    		}else if(sensor == SensorManager.SENSOR_ACCELEROMETER){
    			myTextView5.setText("Current Accelero x:"+values[0]);
    			myTextView6.setText("Current Accelero y:"+values[1]);
    			myTextView7.setText("Current Accelero z:"+values[2]);
    		}else if(sensor == SensorManager.SENSOR_ORIENTATION){
    			myTextView8.setText("Current Oraenttation x:"+values[0]);
    			myTextView9.setText("Current Oraenttation y:"+values[1]);
    			myTextView10.setText("Current Oraenttation z:"+values[2]);
    		}else if(sensor == SensorManager.SENSOR_LIGHT){
    			myTextView11.setText("Current Oraenttation x:"+values[0]);
    		}
    	}
    };
    @Override
    protected void onResume() {
    	mySensorManager.registerListener(
    			mySensorListener,
    			SensorManager.SENSOR_TEMPERATURE |
    			SensorManager.SENSOR_MAGNETIC_FIELD |
    			SensorManager.SENSOR_ACCELEROMETER |
    			SensorManager.SENSOR_LIGHT |
                        SensorManager.SENSOR_ORIENTATION,
    			SensorManager.SENSOR_DELAY_UI
    			);
    	super.onResume();
    }
    @Override
    protected void onPause() {
    	mySensorManager.unregisterListener(mySensorListener);
    	super.onPause();
    }
}
 

更改res/layout/下面的main.xml,为如下内容:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
	<TextView
		android:id="@+id/title"
		android:gravity="center_horizontal"
		android:textSize="20px"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/title"/>
	<TextView
		android:id="@+id/myTextView1"
		android:textSize="18px"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/myTextView1"/>
	    <TextView
		android:id="@+id/myTextView2"
		android:textSize="18px"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/myTextView2"/>
	    <TextView
		android:id="@+id/myTextView3"
		android:textSize="18px"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/myTextView3"/>
	    <TextView
		android:id="@+id/myTextView4"
		android:textSize="18px"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/myTextView4"/>
	    <TextView
		android:id="@+id/myTextView5"
		android:textSize="18px"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/myTextView5"/>
	    <TextView
		android:id="@+id/myTextView6"
		android:textSize="18px"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/myTextView6"/>
	    <TextView
		android:id="@+id/myTextView7"
		android:textSize="18px"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/myTextView7"/>
	    <TextView
		android:id="@+id/myTextView8"
		android:textSize="18px"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/myTextView8"/>
	    <TextView
		android:id="@+id/myTextView9"
		android:textSize="18px"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/myTextView9"/>
	    <TextView
		android:id="@+id/myTextView10"
		android:textSize="18px"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/myTextView10"/>
	    <TextView
		android:id="@+id/myTextView11"
		android:textSize="18px"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/myTextView11"/>
</LinearLayout>

更改res/values/strings.xml为如下内容:

 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">templator!</string>
    <string name="app_name">templator</string>
    <string name="title">Sigma Sensors</string>
    <string name="myTextView1">Current Temprature:</string>
    <string name="myTextView2">Current Magnetic x:</string>
    <string name="myTextView3">Current Magnetic y:</string>
    <string name="myTextView4">Current Magnetic z:</string>
    <string name="myTextView5">Current Accelero x:</string>
    <string name="myTextView6">Current Accelero y:</string>
    <string name="myTextView7">Current Accelero z:</string>
    <string name="myTextView8">Current Oraenttation x:</string>
    <string name="myTextView9">Current Oraenttation y:</string>
    <string name="myTextView10">Current Oraenttation z:</string>
    <string name="myTextView11">Current Light:</string>
</resources>

墙内的Linux(Ubuntu)环境下安装Eclipse+Android SDK(ADT)教程

2011年4月29日 sigma 12 条评论 43,827 views

最近几天想玩玩Android开发,于是试着在Linux下装Adroid SDK,无奈,由于Android SDK(ADT)的网站被墙了,不能直接在Eclipse的Install New software里安装,几经折腾,终于在linux下安装好了Adroid SDK,在这里分享下,希望对有些人有用,能少走些弯路。

  1. 下载最新的Eclipse 3.6.2(注意,最好是javaEE的),点这里下载.
  2. 下载ADT-0.9.9,地址:http://dl-ssl.google.com/android/ADT-0.9.9.zip。本来是可以直接在Eclipse输入https://dl-ssl.google.com/android/eclipse在线安装的,但由于万恶的墙,我这里不行,总出现fetch error。
  3. 进入Eclipse->Help->Install Software进入Install面板,点Add,点archive,将下载的ADT安装。
  4. 下载Android SDK for linux包,地址:http://dl.google.com/android/android-sdk_r10-linux_x86.tgz
  5. 下载后的SDK不是完整的,需要下载一些其他文件,如api,platforms,本来这是可以直接在SDK Manager里直接更新的,但是由于被墙了,会出现Failed to fetch URL http://dl-ssl.google.com/android/repository/repository.xml。网上有的方法是设置代理服务器,但我这里没用,只好作罢。
  6. 进入http://dl-ssl.google.com/android/repository/repository.xml,然后在xml中逐个寻找linux系统的文件,在迅雷里面直接下载下面文件并按下面方法安装(推荐迅雷,否则速度接近20k,拖1G的SDK够你受的)。下面是具体的文件列表(以下文件夹没有可以自行创建) :
  7. 各个API版本,直接解压到add-ons(这个文件夹是上面的android-sdk_r10-linux_x86.tgz解压后得到有):
    https://dl-ssl.google.com/android/repository/google_apis-8_r02.zip
    https://dl-ssl.google.com/android/repository/google_apis-7_r01.zip
    https://dl-ssl.google.com/android/repository/google_apis-6_r01.zip
    https://dl-ssl.google.com/android/repository/google_apis-5_r01.zip
    https://dl-ssl.google.com/android/repository/google_apis-4_r02.zip
    https://dl-ssl.google.com/android/repository/google_apis-3-r03.zip
  8. 各个platforms版本,我只下了两个,解压到platforms:
    https://dl-ssl.google.com/android/repository/android-2.1_r02-linux.zip
    https://dl-ssl.google.com/android/repository/android-2.2_r02-linux.zip
  9. platform-tools和tools,解压到对应文件夹:
    https://dl-ssl.google.com/android/repository/platform-tools_r03-linux.zip
    https://dl-ssl.google.com/android/repository/tools_r10-linux.zip
  10. docs和samples以及market_licensing,解压到对应文件夹: http://dl-ssl.google.com/android/repository/docs-2.2_r01-linux.zip
    http://dl-ssl.google.com/android/repository/samples-2.1_r01-linux.zip
    http://dl-ssl.google.com/android/repository/samples-2.2_r01-linux.zip
    https://dl-ssl.google.com/android/repository/market_licensing-r01.zip
  11. 以上文件,要是有几个都解压到相同目录的,则保持原来的文件夹顶层,直接考进去,如google_apis-8_r02.zip 解压到google_apis-8,则直接放入add-ons目录,否则的话,则先将顶层去掉,放入,如docs,tools,platform-tools,market_licensing.
  12. 在Eclipse中指定(前提是按2,3两步安好了ADT)SDK目录(help->preference->android),点apply,出现sdk则成功,有时会出现(在tools的adb找不到,,只需要将platforms-tools里面的adb拷一份到tool是目录即可)。
  13. 将tools和platform-tools加入到环境变量中。

另外,我在开发中,发现用ubuntu通过ADB一开始无法连接手机,通过lsusb能发现手机能连上,通过adb device命令得到“???? no permission”的提示,这主要因为权限问题,需要先通过adb kill-server停止adb守护进程,再用sudo adb start-server启动adb。(前提是将adb加入到了root环境变量中,而这最简单的方法是通过ln –s /usr/bin/adb  /path/to/adb 在bin下创建一个到adb的软链接)。

Micolog添加自定义模块

2010年10月23日 sigma 14 条评论 37,042 views

有时,我们的博客需要经常更新一些模块的内容,如广告栏,以及一些其他不同的人设置不一样的工具。为了方便管理,这些模块最好都要移到后台,这样就可以经常更改模块内容而不用更改博客源码重新上传。之前,我在colin-young的博客上看到了一篇如何后台管理侧边栏模块的文章,受此启发,我想也可以把任何位置的模块都实现后台管理,经过尝试发现可行,具体效果直接看本文的中间和下面,左边的广告条以及aboutme就行了。在此简述一下实现方法(和colin-young的方法几乎一样,只是将其推广了)。

  • 在“\micolog\model.py”搜索“blognotice=db.TextProperty(default=”)”,在其后加入:
     YouModelName=db.TextProperty(default='') 
  • 在“\micolog\views\admin\setup.html”搜索“blog.blognotice”,在30行处关于设置blognotice的代码,仿照其语法,添加如下代码:
    <tr valign="top">
    <th scope="row">{% trans "YouModelName:"%}</th>
    <td><textarea id="YouModelName" style="width:95%" cols="45" rows="2" name="YouModelName">{{blog.YouModelName|escape}}</textarea>
    </td>
    </tr> 

    继续搜索blognotice,大概170行有如下代码

    <input value="title,subtitle,...,default_link_format,blognotice" type="hidden" name="str_options" />

    在blognotice附近添加你的模块名

  • 在需要调用该模块的地方,如sidebar.html,single.html等模板文件中,加入调用代码:
    <div id="YouModelName" class="widget widget_YouModelName">
    <h3>YouModelName</h3>
    <ul>
    {{blog.YouModelName}}
    </ul>
    </div>
  • 上传部署,在后台即可以看到模块设置了,支持任何html标签(注意,不能够转义,默认的blognotice转义了,即上面那步为{{blog.YouModelName}}而不是{{blog.YouModelName|escape}})

Done & enjoy~

Some opensource projects created by me

2010年9月25日 sigma 没有评论 14,666 views

On this page, i will place some projects created by me~
在本页我将一些我自己做的一些有意义的小工具或者小实验和大家分享

Projects created by when i am an undergradute student of USTC :( And all source codes  are licensed by GPL3.0以下是一些我本科做的一些小玩意儿,所有代码都用GPL3.0协议发布.)

  • An PWM generater ip core(一个生成PWM的IP):this is a ip core writen in verilog lauguage aimed at generating pwm wave at real time.You can download the source code of the project in the following address:
  • An 8088 IP core(8088CPU的IP核) writen in verilog, this is a opensource ip core create by HaoxiangLi and me,the ip core has implemented 40+ 8088 instructions.You can view the project home in Google Code. And you can download it from my Skydrive:
  • An NRF24L01 Communication(NRF24L01的通信模块) project,this a subproject of RoboGame@USTC. It can make the main robot board communication with the control hand board using NRF24L01.Download address:
分类: code, study 标签: , , , ,

无觅相关文章插件,快速提升流量