距離傳感器自動(dòng)待機(jī)

近期瑞躺,在調(diào)試自己的Android2.3.4系統(tǒng)(三星s5pv210平臺(tái))時(shí)敷搪,發(fā)現(xiàn)自己的light sensor不僅僅是光傳感器,還有靠近/接近傳感器功能(Proximity)幢哨,而自己的平臺(tái)也沒有通話功能赡勘,故將其利用起來,模仿ipad2做個(gè)蓋子關(guān)屏功能捞镰,我這邊實(shí)現(xiàn)的是靠近讓系統(tǒng)待機(jī)闸与,相當(dāng)于我們平臺(tái)上的短按電源鍵待機(jī)操作。對(duì)于我們的Proximity Sensor岸售,可以獲取到8位精度的值践樱,而我們?cè)贚inux驅(qū)動(dòng)上報(bào)時(shí)只傳兩個(gè)狀態(tài):遠(yuǎn)和近,故在Android HAL上也只傳兩個(gè)狀態(tài):0和100cm凸丸,這已足夠我們功能實(shí)現(xiàn)了拷邢,下面是功能實(shí)現(xiàn)的兩個(gè)步驟:

1、前臺(tái)開關(guān)

在Settings/Display里添加一項(xiàng)Auto-close screen甲雅,這里實(shí)現(xiàn)是一個(gè)復(fù)選框解孙,相應(yīng)的操作如下:

1)、修改packages/apps/Settings/res/xml/display_settings.xml文件抛人,添加:

android:key="proximity"

android:title="@string/proximity_title"/>

2)弛姜、修改packages/apps/Settings/res/values/strings.xml文件,添加:

Auto-close screen

由于此處是實(shí)驗(yàn)用妖枚,故不實(shí)現(xiàn)多國(guó)語(yǔ)言廷臼,暫不修改其他values-*目錄下的strings.xml文件。

3)、修改packages/apps/Settings/src/com/android/settings/DisplaySettings.java文件荠商,在public class DisplaySettings extends PreferenceActivity implementsPreference.OnPreferenceChangeListener類里添加如下內(nèi)容:

private static final String KEY_PROXIMITY = "proximity";

private static final String PROXIMITY_CLOSE = "proximity_close";

private CheckBoxPreference mProximity;

在protected void onCreate(Bundle savedInstanceState)函數(shù)里添加如下內(nèi)容:

mProximity = (CheckBoxPreference) findPreference(KEY_PROXIMITY);

mProximity.setPersistent(false);

在private void updateState(boolean force)函數(shù)里添加如下內(nèi)容:

mProximity.setChecked(Settings.System.getInt(getContentResolver(),PROXIMITY_

CLOSE,0) != 0);

在public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)函數(shù)里添加如下內(nèi)容:

if (preference == mProximity) {

Settings.System.putInt(getContentResolver(),PROXIMITY_CLOSE,mProximity.isChecked() ? 1 : 0);

}

至此寂恬,整個(gè)用戶控制界面實(shí)現(xiàn)好了,即我們的前臺(tái)開關(guān)控制界面實(shí)現(xiàn)好了莱没,接下來要實(shí)現(xiàn)后臺(tái)數(shù)據(jù)控制了初肉。

2、后臺(tái)實(shí)現(xiàn)

后臺(tái)相對(duì)簡(jiǎn)單點(diǎn)饰躲,因?yàn)椴挥眯薷奶辔募烙剑恍栊薷膄rameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java文件即可。

在文件中添加如下包含:

import android.hardware.SensorEventListener;

import android.hardware.SensorManager;

import android.hardware.SensorEvent;

import android.hardware.Sensor;

接下來在public class PhoneWindowManager implements WindowManagerPolicy類中添加如下內(nèi)容:

static final int DEFAULT_PROXIMITY_SCREEN_CLOSE = 0;

int mProximityDefault = DEFAULT_PROXIMITY_SCREEN_CLOSE;

private static final String PROXIMITY_CLOSE = "proximity_close";

SensorManager mSensorManager;

Sensor mProximitySensor;

接下來在void observe()函數(shù)中添加如下內(nèi)容:

resolver.registerContentObserver(Settings.System.getUriFor(PROXIMITY_CLOSE),false,this);

接下來在上面的函數(shù)后添加如下定義內(nèi)容:

private SensorEventListener proximityListener = new SensorEventListener(){

@Override

public void onSensorChanged(SensorEvent event){

//Log.v(TAG,"onSensorChanged");

switch (event.sensor.getType()){

case Sensor.TYPE_PROXIMITY:

if (event.values[0] == 0){//near

//Log.v(TAG,"near");

PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);

pm.goToSleep(SystemClock.uptimeMillis());

}

else {//far

//Log.v(TAG,"far");

}

break;

}

//Log.v(TAG,"type="+event.sensor.getType());

}

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

//Log.v(TAG,"onAccuracyChanged");

}

};

void updateScreenCloseListerner() {

if (mProximityDefault == 1)

{//allow proximity sensor to close screen

mSensorManager =(SensorManager)mContext.getSystemService(Context.SENSOR_SERVICE);

mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);

mSensorManager.registerListener(proximityListener,mProximitySensor,SensorManager.SENSOR_DELAY_FASTEST);

Log.v(TAG,"proximity control screen allowed");

}

else if (mProximityDefault == 0)

{//not allow

mSensorManager.unregisterListener(proximityListener);

Log.v(TAG,"proximity control screen not allowed");

}

}

接下來在public void updateSettings()函數(shù)中添加如下內(nèi)容:

int proximityDefault = Settings.System.getInt(resolver,PROXIMITY_CLOSE,DEFAULT_PROXIMITY_SCREEN_CLOSE);

if (mProximityDefault != proximityDefault) {

mProximityDefault = proximityDefault;

updateScreenCloseListerner();

}

至此嘹裂,整個(gè)后臺(tái)的控制也實(shí)現(xiàn)好了妄壶,接下來要看你的Proximity Sensor發(fā)力了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寄狼,一起剝皮案震驚了整個(gè)濱河市丁寄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泊愧,老刑警劉巖伊磺,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異拼卵,居然都是意外死亡奢浑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門腋腮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雀彼,“玉大人,你說我怎么就攤上這事即寡』惭疲” “怎么了?”我有些...
    開封第一講書人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵聪富,是天一觀的道長(zhǎng)莺丑。 經(jīng)常有香客問我,道長(zhǎng)墩蔓,這世上最難降的妖魔是什么梢莽? 我笑而不...
    開封第一講書人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮奸披,結(jié)果婚禮上昏名,老公的妹妹穿的比我還像新娘。我一直安慰自己阵面,他們只是感情好轻局,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開白布洪鸭。 她就那樣靜靜地躺著,像睡著了一般仑扑。 火紅的嫁衣襯著肌膚如雪览爵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,807評(píng)論 1 314
  • 那天镇饮,我揣著相機(jī)與錄音蜓竹,去河邊找鬼。 笑死储藐,一個(gè)胖子當(dāng)著我的面吹牛梅肤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播邑茄,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼俊啼!你這毒婦竟也來了肺缕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤授帕,失蹤者是張志新(化名)和其女友劉穎同木,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跛十,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彤路,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芥映。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洲尊。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖奈偏,靈堂內(nèi)的尸體忽然破棺而出坞嘀,到底是詐尸還是另有隱情,我是刑警寧澤惊来,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布丽涩,位于F島的核電站,受9級(jí)特大地震影響裁蚁,放射性物質(zhì)發(fā)生泄漏矢渊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一枉证、第九天 我趴在偏房一處隱蔽的房頂上張望矮男。 院中可真熱鬧,春花似錦刽严、人聲如沸昂灵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)眨补。三九已至管削,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撑螺,已是汗流浹背含思。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甘晤,地道東北人含潘。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像线婚,于是被迫代替她去往敵國(guó)和親遏弱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,336評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理塞弊,服務(wù)發(fā)現(xiàn)漱逸,斷路器,智...
    卡卡羅2017閱讀 134,719評(píng)論 18 139
  • afinalAfinal是一個(gè)android的ioc游沿,orm框架 https://github.com/yangf...
    passiontim閱讀 15,441評(píng)論 2 45
  • ?《紅番區(qū)》是嘉禾娛樂事業(yè)有限公司出品的一部動(dòng)作電影饰抒,由成龍、梅艷芳诀黍、董驃袋坑、葉芳華主演,該片于1994年在香港眯勾、加...
    d55a31d8c39e閱讀 1,755評(píng)論 0 1
  • 記憶中你的樣子枣宫, 已經(jīng)是碎成渣的可憐兮兮。 曾經(jīng)的過往吃环, 我們伸手卻早已回不去了镶柱。 偶然之間的想你, 只是徘徊于過...
    阿俊xi閱讀 348評(píng)論 0 1