1.frameworks/base/core/res/AndroidManifest.xml:
<!-- Allows an application to sensor_enable xiayu -->android:description="@string/permdesc_installLocationProvider" />
2.frameworks/base/core/res/res/values/strings.xml
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
3.frameworks/base/core/java/android/app/ContextImpl.java
registerService(SENSOR_SERVICE, new ServiceFetcher() {
389 public Object createService(ContextImpl ctx) {
390 return new SensorManager(ctx,ctx.mMainThread.getHandler().getLooper());//xiayu fix
391 }});
测试源码:
package com.example.sensor_info; import java.util.List; import com.example.sensor_info.R; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorManager; import android.widget.TextView; import android.util.Log; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { try{ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }catch(Exception e){ Log.e("ERROR", "ERROR IN CODE: " + e.toString()); e.printStackTrace(); } final TextView tx1 = (TextView) findViewById(R.id.TextView01); //tx1.setText("xiayu xxxxxxxxxxxxxxxxxx"); try{ SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List<Sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL);//显示有多少个传感器 tx1.setText("经检测该手机有" + allSensors.size() + "个传感器,他们分别是:\n"); for (Sensor s : allSensors) { String tempString = "\n" + " 设备名称:" + s.getName() + "\n" + " 设备版本:" + s.getVersion() + "\n" + " 供应商:" + s.getVendor() + "\n"; switch (s.getType()) { case Sensor.TYPE_ACCELEROMETER: tx1.setText(tx1.getText().toString() + s.getType() + " 加速度传感器accelerometer" + tempString); break; case Sensor.TYPE_GYROSCOPE: tx1.setText(tx1.getText().toString() + s.getType() + " 陀螺仪传感器gyroscope" + tempString); break; case Sensor.TYPE_LIGHT: tx1.setText(tx1.getText().toString() + s.getType() + " 环境光线传感器light" + tempString); break; case Sensor.TYPE_MAGNETIC_FIELD: tx1.setText(tx1.getText().toString() + s.getType() + " 电磁场传感器magnetic field" + tempString); break; case Sensor.TYPE_PRESSURE: tx1.setText(tx1.getText().toString() + s.getType() + " 压力传感器pressure" + tempString); break; case Sensor.TYPE_PROXIMITY: tx1.setText(tx1.getText().toString() + s.getType() + " 距离传感器proximity" + tempString); break; default: tx1.setText(tx1.getText().toString() + s.getType() + " 未知传感器" + tempString); break; } } }catch(Exception e){ tx1.setText("ERROR:"+e.toString()); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
Androidmanifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sensor_info" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.SENSOR_INFO" /> <uses-permission android:name="android.permission.SENSOR_ENABLE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.sensor_info.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>