【问题标题】:How do i lock phone programmatically android我如何以编程方式锁定手机android
【发布时间】:2013-11-02 19:25:18
【问题描述】:

我如何以编程方式锁定我的安卓手机? 我尝试遵循this 示例。但是当我点击启用按钮时,Activity 会弹出几毫秒,然后自动关闭

日志仅显示此日志没有错误

 Log.i("DeviceAdminSample", "Admin enable FAILED!");

谁能告诉我如何锁定安卓屏幕(比如多次尝试模式锁定和手机锁定时的锁定)

感谢任何帮助

【问题讨论】:

    标签: java android device-manager


    【解决方案1】:

    你必须让你的应用成为管理员,在这里阅读一些东西

    创建一个新的空项目并创建一个名为MyAdminReceiver 的类,它像这样扩展DeviceAdminReceiver

    import android.app.admin.DeviceAdminReceiver;
    
    public class MyAdminReceiver extends DeviceAdminReceiver{
    
    }
    

    创建一个名为 xml 的新文件夹并为您的管理员权限创建一个名为 admin.xml 的 .xml 文件并添加策略,以防锁定屏幕

    <device-admin xmlns:android="http://schemas.android.com/apk/res/android" >
        <uses-policies>
            <force-lock />
        </uses-policies>
    </device-admin>
    

    在您的清单中,在 Application 标签下添加接收器

    <receiver
        android:name="MyAdminReceiver"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
        <meta-data
            android:name="android.app.device_admin"
            android:resource="@xml/admin"/>
    
        <intent-filter>
            <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
        </intent-filter>
    </receiver>
    

    在你的MainActivity.java 中添加这样的代码

    import android.app.Activity;
    import android.app.admin.DevicePolicyManager;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class MainActivity extends Activity implements OnClickListener {
    
        private static final int ADMIN_INTENT = 15;
        private static final String description = "Some Description About Your Admin";
        private DevicePolicyManager mDevicePolicyManager; 
        private ComponentName mComponentName;  
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mDevicePolicyManager = (DevicePolicyManager)getSystemService(  
                      Context.DEVICE_POLICY_SERVICE);  
            mComponentName = new ComponentName(this, MyAdminReceiver.class);  
            Button btnEnableAdmin = (Button) findViewById(R.id.btnEnableAdmin);
            Button btnDisableAdmin = (Button) findViewById(R.id.btnDisableAdmin);
            Button btnLock = (Button) findViewById(R.id.btnLock);
            btnEnableAdmin.setOnClickListener(this);
            btnDisableAdmin.setOnClickListener(this);
            btnLock.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.btnEnableAdmin:
                Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mComponentName);
                intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,description);
                startActivityForResult(intent, ADMIN_INTENT);
            break;
    
            case R.id.btnDisableAdmin:
                mDevicePolicyManager.removeActiveAdmin(mComponentName);  
                Toast.makeText(getApplicationContext(), "Admin registration removed", Toast.LENGTH_SHORT).show();
            break;
    
            case R.id.btnLock:
                 boolean isAdmin = mDevicePolicyManager.isAdminActive(mComponentName);  
                 if (isAdmin) {  
                     mDevicePolicyManager.lockNow();  
                 }else{
                     Toast.makeText(getApplicationContext(), "Not Registered as admin", Toast.LENGTH_SHORT).show();
                 }
            break;
            }
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == ADMIN_INTENT) {
                if (resultCode == RESULT_OK) {
                    Toast.makeText(getApplicationContext(), "Registered As Admin", Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(getApplicationContext(), "Failed to register as Admin", Toast.LENGTH_SHORT).show();
                }
            }
        }
    
    }
    

    注意:如果您尝试从 Activity 子类调用其他管理设备的 Intent,则使用 Intent.FLAG_ACTIVITY_NEW_TASK 时可能会出现错误,但是当您使用它时,您的窗口可能不会像你的情况一样弹出,所以尝试只从活动的子类中打开它

    您也不能卸载您的应用,除非它没有被取消注册为管理员

    【讨论】:

      【解决方案2】:

      但是当我点击启用按钮时,Activity 会弹出几毫秒,然后自动关闭

      该示例中显示的代码将在单击时调出设置应用程序。

      谁能告诉我如何锁定安卓屏幕

      您使用链接到的代码。 Here is my sample app 显示相同的基本内容。

      具体来说:

      • 您的清单中需要有一个BroadcastReceiver,它被设置为设备管理组件

      • 用户必须以设备管理员身份激活您的应用

      • 然后你在DevicePolicyManager上拨打lockNow()

      Here is the developer documentation 在设备管理 API 上。

      【讨论】:

      • 感谢锁屏,现在我该如何执行 ???你也能解释一下什么是
      • 我能做到 我只有最后一个问题。加密存储仅对我的存储有效还是对所有存储有效?我的存储是指我保存的数据或创建的首选项
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      相关资源
      最近更新 更多