存档

文章标签 ‘xml’

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

2011年4月29日 sigma 5 条评论 21,693 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>

博客搬家:导出live space 到micolog或者wordpress

2010年10月7日 sigma 没有评论 11,940 views

前段时间,微软宣布将停止live space 的服务,建议用户转移到wordpress,但是对于有些用户,比如说向我们这些用GAE+micolog搭建独立博客的用户,并不像直接搬到wordpress,或者由于各种原因,不想把live space的数据马上删除(默认转到wordpress,live space数据会删除)。因此,找一个能够把live space数据导出到micolog格式或者wordpress格式就很有必要。

我在网上找了下,终于找到了一个叫Live-space-mover的工具,并且成功的将live space 导出到micolog和wordpress,在此简要的记录一下过程。

准备工作:

1.设置live space日期格式:

重要的是让WindowsLiveSpace和Wordpress的日期格式一致,这里我两个设置的是2010/10/7。在WindowsLiveSpace中,我的时间格式是10:43,设置的路径是“选项”->“常规”->“日期和时间格式”:

image

另外,在“选项”->“日志”->“显示日志日期”选项中,勾选“在页首出显示日志发布日期”。

2.安装python:

我使用的是python2.5.2+Beautiful Soup 3.0.6,Python 2.5.2的官方下载地址在:

http://www.python.org/download/releases/2.5.2/

下载后若在命令行敲python说命令没找到,则要手动将python路径添加到环境变量,或者后续命令时把python路径敲全。

3.下载Beautiful Soup 3.0.6:

Beautiful Soup 3.0.6是一个解析HTML页面的类库,接下来那个下载博客文章的脚本需要用它。下载地址:

http://www.crummy.com/software/BeautifulSoup/download/3.x/BeautifulSoup-3.0.6.tar.gz

解压到一个文件夹,比如D:downloadBeautifulSoup-3.0.6。你将看到BeautifulSoup.py等几个脚本。

4.下载Live-space-mover:

Live-space-mover这个脚本,能够把WindowsLiveSpace中的所有文章和评论等,生成一个Wordpress能够识别的XML文件,以实现博客搬家的目的。下载地址:

http://code.google.com/p/live-space-mover/downloads/list

现在的最新版本是live-space-mover.1.8.zip。解压到Beautiful Soup 3.0.6的目录。在BeautifulSoup-3.0.6目录下,你应该看到脚本live-space-mover.py。


上述3,4两部,大家若嫌麻烦可以直接下载我打好包的Beautiful Soup 3.0.6+Live-space-mover,下载地址:

 

搬到micolog或者wordpress:

1.导出live space:

在cmd下,cd到BeautifulSoup-3.0.6目录,若时间格式和我的一样,直接运行:

python live-space-mover.py -s http://yourSpaceName.spaces.live.com/

若时间格式后面还有秒,运行:

python live-space-mover.py -s http://yourSpaceName.spaces.live.com/ -t “%m/%d/%Y %I:%M:%S %p”

其中youSpaceName是你的博客名。倘若环境变量中没有python,则把python的路径输全即可,如:

D:\Program Files\Python25\python.exe live-space-mover.py -s http://yourSpaceName.spaces.live.com/ -t “%m/%d/%Y %I:%M:%S %p”

2.导入到micolog或者wordpress:

倘若是导入到wordpress,可以直接导入(tools->import->wordpress格式),只需设置一下作者即可。

倘若导入到micolog,则需要手动把一些中文post_name改成拼音或英文,如:

 <wp:post_name>中文</wp:post_name>
 

改成:

 <wp:post_name>english</wp:post_name>
 

否则或出现对应item没导入进去,有些文章会缺失。

wordpress评论也能够完美导入,但micolog貌似不能,我从wordpress导入到micolog也不能导入评论,所以这应该是micolog导入功能不够完善所致。

done & enjoy~

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