2011-07-03 24 views
4

我是Android開發新手,這就是爲什麼我碰壁了。我希望應用程序作爲服務運行,並監視SMS。如果收到特定的SMS消息,它會鎖定手機(就像鎖定期已過)。有點像遙控鎖。我使用DevicePolicyManager來調用lockNow()方法。但是,它會觸發錯誤部分lockNow()被調用。Android DevicePolicyManager lockNow()

下面是關於活動中的示例代碼:

public class SMSMessagingActivity extends Activity { 
    /** Called when the activity is first created. */ 

public static DevicePolicyManager mDPM; 

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

     mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);      

    } 

    public static void LockNow(){ 
     mDPM.lockNow(); 
    } 

} 

我看着http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/DeviceAdminSample.html作爲參考例。

任何人都可以幫助我嗎?告訴我我的代碼有什麼問題?我是否需要調整某些功能以在模擬器或設備上啓用管理權限?

謝謝!

+0

在談到它總是一個好主意,它張貼 – mibollma

+0

我真的不用於編程與Eclipse錯誤,所有我能找到的是運行時錯誤。 – Devmonster

回答

3

下面是從文檔的內容:

主叫設備管理員必須已請求USES_POLICY_FORCE_LOCK才能夠調用此方法;如果沒有,則會拋出安全異常。

因此,你應該做你的OnCreate如下:

ComponentName devAdminReceiver; // this would have been declared in your class body 
// then in your onCreate 
    mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); 
    devAdminReceiver = new ComponentName(context, deviceAdminReceiver.class); 
//then in your onResume 

boolean admin = mDPM.isAdminActive(devAdminReceiver); 
if (admin) 
    mDPM.lockNow(); 
else Log.i(tag,"Not an admin"); 

在一個側面說明,你的示例代碼是一種活動。
那,你應該只是使用廣播接收機來實現一切,並監控短信。

下面是用於接收短信的API例如:

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/SmsMessageReceiver.html

+0

我迷路了。在哪一點你真的要求'USES_POLICY_FORCE_LOCK'? – greenoldman

+1

我沒有在這裏介紹。例如,您在請求管理員權限時請求「USES_POLICY_FORCE_LOCK」 - 例如,在應用程序設置期間會在使用之前完成此操作。 [本頁](http://developer.android.com/guide/topics/admin/device-admin.html)向您展示瞭如何做到這一點。 – Jakar

相關問題