2014-03-01 105 views
1

我正在構建一個應用程序,它使用電源按鈕計數來執行一些操作,我有一個BroadcastReceiver和一個可幫助我做到這一點的服務。我使用ACTION_SCREEN_OFF,ACTION_SCREEN_ON和ACTION_USER_PRESENT作爲意圖過濾器,一切正常,每臺印刷機上的電源按鈕執行我想要的操作,但接近傳感器與ACTION_SCREEN_OFF和ACTION_SCREEN_ON一起使用相同的場景。因此,當用戶撥打電話時,我的服務正在ACTION_SCREEN_OFF和ACTION_SCREEN_ON的後臺檢查中運行,因此當主叫方將設備帶走並朝向他/她的耳朵時,接近傳感器將執行相同的操作。我想在此區分電源按鈕按鈕和接近傳感器操作。爲了完成這個任務,我應該遵循什麼?這裏是我的代碼的一部分,這可能會幫助你理解我想要問什麼。通過電源按鈕和接近傳感器區分屏幕或屏幕

我的擴展服務類具有下面的代碼在它的onCreate():

mReceiver=new PowerButtonActionReciever(); 
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); 
filter.addAction(Intent.ACTION_SCREEN_OFF); 
filter.addAction(Intent.ACTION_USER_PRESENT); 
registerReceiver(mReceiver, filter); 

延伸廣播接收器的類捕獲電源按鈕單擊它的onReceive()方法:

@Override 
public void onReceive(Context context, Intent intent) 
{ 
     //perform some action 
} 

回答

0

你可以註冊接近傳感器的監聽器並執行與電話應用程序相同的檢查。

private SensorManager mSensorManager; 
private Sensor mSensor; 
... 
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 

public class SensorActivity extends Activity implements SensorEventListener { 
    private SensorManager mSensorManager; 
    private Sensor mProximity; 

    @Override 
    public final void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Get an instance of the sensor service, and use that to get an instance of 
    // a particular sensor. 
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
    } 

    @Override 
    public final void onAccuracyChanged(Sensor sensor, int accuracy) { 
    // Do something here if sensor accuracy changes. 
    } 

    @Override 
    public final void onSensorChanged(SensorEvent event) { 
    float distance = event.values[0]; 
    // Do something with this sensor data. 
    } 

    @Override 
    protected void onResume() { 
    // Register a listener for the sensor. 
    super.onResume(); 
    mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL); 
    } 

    @Override 
    protected void onPause() { 
    // Be sure to unregister the sensor when the activity pauses. 
    super.onPause(); 
    mSensorManager.unregisterListener(this); 
    } 
}