我如何以编程方式锁定手机android

Posted

技术标签:

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

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

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

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

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

感谢任何帮助

【问题讨论】:

【参考方案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 上。

【讨论】:

感谢锁屏,现在我该如何执行 ???你也能解释一下什么是 和 我能做到 我只有最后一个问题。加密存储仅对我的存储有效还是对所有存储有效?我的存储是指我保存的数据或创建的首选项

以上是关于我如何以编程方式锁定手机android的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式避免android手机中的深度睡眠模式?

如何以编程方式禁用解锁屏幕

如何以编程方式锁定活动操作

如何以编程方式锁定 Chromebook?

如何以编程方式检查大写锁定是不是打开

如何以编程方式使用密码设置屏幕锁定?