2012-02-10 106 views
0

我可以使用Device Policy Manager在Android中鎖定屏幕。即使用戶在其他應用程序中(Globaly),它也會鎖定屏幕。同樣的事情,我想要解鎖。用戶在我的應用程序中鎖定屏幕時,我的應用程序會解鎖屏幕。但是,當用戶用其他應用程序鎖定屏幕時,它不是解鎖屏幕。無法在Android中解鎖屏幕

我正在使用接近傳感器來鎖定/解鎖屏幕,並在解鎖的onPause方法中註冊ProximitySensorEventListener。它只會在我的應用程序內解鎖一個屏幕。如何做一個屏幕應該解鎖一個屏幕與任何其他應用程序(全球)?? PLZ幫助我解決這個問題。

在此先感謝。

+1

您是否嘗試在服務中註冊此偵聽器? – Huang 2012-02-10 07:49:43

回答

2

是您必須在背景中運行服務以及接近傳感器輸入,以獨立於您的前臺應用程序使用它。下面的代碼顯示在後臺

public class PocketService extends Service implements SensorEventListener { 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void onCreate() { 
    Toast.makeText(this, "My Service Created", Toast.LENGTH_SHORT).show(); 
    Log.d("TAG", "onCreate"); 

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

    mSensorManager.registerListener(this, mProximity, 
      SensorManager.SENSOR_DELAY_NORMAL); 
} 

@Override 
public void onDestroy() { 
    Toast.makeText(this, "My Service Stopped", Toast.LENGTH_SHORT).show(); 
    Log.d("TAG", "onDestroy"); 
    mSensorManager.unregisterListener(this); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startid) { 
    Toast.makeText(this, "My Service Started", Toast.LENGTH_SHORT).show(); 
    Log.d("TAG", "onStart"); 
    return START_STICKY; 
} 

public void onSensorChanged(SensorEvent event) { 
    Sensor sensor = event.sensor; 
    if (sensor.getType() == Sensor.TYPE_PROXIMITY) { 
     distance = event.values[0]; 
     if (distance < 1) { 
       enableScreenLock(); 
     } else { 
       disableScreenLock(); 
     } 
     } 

} 
public void onAccuracyChanged(Sensor arg0, int arg1) { 
    // TODO Auto-generated method stub 

} 
} 

你必須從活動開始這一點,直到任務管理器殺它,它會在你的後臺運行,由於時間緊內存不足運行的服務。但是它會嘗試在內存可用時重新創建它的實例,因爲onStartCommand()方法返回START_STICKY。