当前位置: 首页 > 面试题库 >

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

董昕
2023-03-14
问题内容

我如何以编程方式锁定我的Android手机?我想下面这个例子。但是,当我单击启用按钮时,活动会弹出几毫秒,然后自动关闭

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

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

谁能告诉我如何锁定android屏幕(就像在进行多次模式锁定和手机锁定时锁定一样)

任何帮助表示赞赏


问题答案:

您必须将您的应用设为管理员,在这里阅读一些内容

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

import android.app.admin.DeviceAdminReceiver;

public class MyAdminReceiver extends DeviceAdminReceiver{

}

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

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

在清单中的“应用程序”标签下添加接收方

<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但是当您使用该窗口时,窗口可能不会弹出,因此请尝试从以下子类中打开它:仅活动

此外,除非尚未将其注销为管理员,否则您无法卸载您的应用程序



 类似资料:
  • 在我的应用程序中,我需要锁定和解锁手机。我搜索了它,我找到了很多答案,我尝试了它们,但没有人在工作。 我需要在< code>onCreate()上解锁手机,并在完成活动时再次锁定手机。 你们知道有什么方法可以做同样的事情吗? 谢谢朋友们。 编辑: 我尝试过的一些链接是: 锁屏了怎么显示活动 Android屏幕锁定/以编程方式解锁 https://groups.google.com/forum/#!

  • 问题内容: 我想制作一个锁屏应用程序。当手机处于锁定模式时,它将在插入USB时关闭手机,以防止其他用户访问手机数据。有谁知道如何以编程方式关闭Android设备,以使其他人在设备处于锁定模式时无法访问数据? 这是在锁定屏幕活动上锁定主屏幕按钮的代码: 问题答案: 使用公开的Android SDK是不可能的。

  • 我正在开发一个应用程序,我必须通过编程来锁定和解锁屏幕。好心帮忙!我不知道如何开发这种类型的功能,支持每个版本的Android操作系统。

  • 我有一个充满自定义视图的应用程序。当我尝试以编程方式创建FAB时,它会抛出一个错误 原因:java.lang.IllegalArgumentException:您需要在设计库中使用theme.AppCompat主题(或后代)。

  • 问题内容: 连接网络后如何向用户显示缓慢的Internet连接注意:不是网络类型(2G,3G,4G,WIFI) 问题答案: 确定您的网络速度-(缓慢的Internet速度) 使用NetworkInfo类,ConnectivityManager和TelephonyManager确定您的网络类型。 从互联网上下载任何文件,并计算花费了多长时间与文件中的字节数。(确定速度检查的唯一方法) 我已经为我的项

  • 问题内容: 在运行时是否可以以编程方式检查持有给定对象锁的线程的名称? 问题答案: 您只能说出当前线程是否持有普通锁()。没有本机代码,您将无法获得对具有锁的线程的引用。 但是,如果您要对线程进行任何复杂的处理,则可能需要熟悉java.util.concurrent包。该确实让你得到它的所有者(但其受保护的方法,所以你必须要扩展这个)。根据您的应用程序的不同,很可能是通过使用并发包,您会发现根本不