2013-07-09 66 views
0

我希望我的应用程序在单击按钮时锁定手机! 以下是我的代码。如何在按钮点击事件上锁定手机? - android

public class MainActivity extends Activity implements OnClickListener { 

    Button b; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     b = (Button) findViewById(R.id.button); 

     b.setOnClickListener(this); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     switch (arg0.getId()) { 
     case R.id.button: 
     KeyguardManager km = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE); 
      KeyguardLock kl = km.newKeyguardLock(KEYGUARD_SERVICE); 
      kl.reenableKeyguard(); 


      break; 
     } 

    } 

} 

这是行不通的。我也尝试在onClick事件中使用以下代码。

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
     wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag"); 
     wl.release(); 

这也行不通。谁能帮我 ?

回答

1

您需要设置a device admin component,然后在DevicePolicyManager上致电lockNow()

This sample project显示从编码的角度来看需要什么。一旦安装,用户必须同意让您的应用成为设备管理员。该活动将路由用户在此设置应用的适当的画面,如果应用程序是不是设备管理员:

public class LockMeNowActivity extends Activity { 
    private DevicePolicyManager mgr=null; 
    private ComponentName cn=null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 
    cn=new ComponentName(this, AdminReceiver.class); 
    mgr=(DevicePolicyManager)getSystemService(DEVICE_POLICY_SERVICE); 
    } 

    public void lockMeNow(View v) { 
    if (mgr.isAdminActive(cn)) { 
     mgr.lockNow(); 
    } 
    else { 
     Intent intent= 
      new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
     intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, cn); 
     intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, 
         getString(R.string.device_admin_explanation)); 
     startActivity(intent); 
    } 
    } 
} 
+0

这不起作用,'mgr.isAdminActive(cn)'总是假,'else'块中没有任何反应。 –

+0

@AlexanderSupertramp:调用startActivity()时什么都不会发生?我无法解释这一点。如果您正在收到'ActivityNotFoundException',那么可能会发生设置应用程序的实施过于过分的情况,您将不得不提示用户手动访问设置。 – CommonsWare

+0

现在没事,我修好了,谢谢。 –

0

使用此代码在您的onCreate()活性的方法来初始化DevicePolicyManager:

myDevicePolicyManager = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); 
       mDeviceAdminSample = new ComponentName(Controller.this, 
         adminActivity.class); 

要锁定装置写在你用它来锁定设定一个布尔事件代码启用:

if (enable) { 
myDevicePolicyManager.lockNow(); 
} 

可能是你必须启用设备管理员,德vicePolicyManager意图被调用,它应该由用户启用。请遵循以下代码:

Intent myIntent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, securemeAdmin); 
+0

什么是secureAdmin? –