• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

学做安卓一键锁屏应用

武飞扬头像
比特灵
帮助1

这个手机没有自带一键锁屏,在应用商店也没有搜到,下载了几个“锁屏APP”试试发现要许多权限呢,还是自己做一个吧放心点。其他手机应该也能用吧。

打包好的应用下载:

这篇文章记录了所有的开发源代码,同时编译好的应用也放到了资源区。

 1,从AndroidManifest.xml开始:

  1.  
    <?xml version="1.0" encoding="utf-8"?>
  2.  
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.  
    package="net.csdn.bigc2001.lockmyphone">
  4.  
     
  5.  
    <application
  6.  
    android:allowBackup="false"
  7.  
    android:icon="@mipmap/ic_launcher"
  8.  
    android:label="@string/app_name"
  9.  
    android:roundIcon="@mipmap/ic_launcher_round"
  10.  
    android:supportsRtl="true"
  11.  
    android:theme="@style/Theme.LockMyPhone">
  12.  
    <receiver
  13.  
    android:name=".MyDeviceAdminReceiver"
  14.  
    android:enabled="true"
  15.  
    android:exported="true"
  16.  
    android:permission="android.permission.BIND_DEVICE_ADMIN">
  17.  
    <meta-data
  18.  
    android:name="android.app.device_admin"
  19.  
    android:resource="@xml/device_admin" />
  20.  
    <intent-filter>
  21.  
    <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
  22.  
    </intent-filter>
  23.  
    </receiver>
  24.  
     
  25.  
    <activity
  26.  
    android:name=".MainActivity"
  27.  
    android:exported="true">
  28.  
    <intent-filter>
  29.  
    <action android:name="android.intent.action.MAIN" />
  30.  
     
  31.  
    <category android:name="android.intent.category.LAUNCHER" />
  32.  
    </intent-filter>
  33.  
    </activity>
  34.  
    </application>
  35.  
     
  36.  
    </manifest>
学新通

2, MainActivity

  1.  
    package net.csdn.bigc2001.lockmyphone;
  2.  
     
  3.  
    import android.app.Activity;
  4.  
    import android.app.admin.DeviceAdminReceiver;
  5.  
    import android.app.admin.DevicePolicyManager;
  6.  
    import android.content.ComponentName;
  7.  
    import android.content.Context;
  8.  
    import android.content.Intent;
  9.  
    import android.content.SharedPreferences;
  10.  
    import android.os.Build;
  11.  
    import android.os.Bundle;
  12.  
    import android.preference.PreferenceManager;
  13.  
    import android.util.Log;
  14.  
    import android.widget.ImageView;
  15.  
    import android.widget.TextView;
  16.  
     
  17.  
    import androidx.annotation.Nullable;
  18.  
     
  19.  
    import java.util.Locale;
  20.  
     
  21.  
    public class MainActivity extends Activity {
  22.  
    private static final String tag = " >MainActivity";
  23.  
    private DevicePolicyManager policyManager;
  24.  
    private SharedPreferences preferences;
  25.  
    public static final String FLAG = "flag.enable";
  26.  
    private boolean needDeviceManager = false;
  27.  
    private TextView tvMemo;
  28.  
    private ImageView imageView;
  29.  
     
  30.  
    @Override
  31.  
    protected void onCreate(Bundle savedInstanceState) {
  32.  
    super.onCreate(savedInstanceState);
  33.  
    Log.d(tag, "--onCreate");
  34.  
    policyManager = (DevicePolicyManager) MainActivity.this.getSystemService(Context.DEVICE_POLICY_SERVICE);
  35.  
    preferences = PreferenceManager.getDefaultSharedPreferences(this);
  36.  
    if ("1".contains(preferences.getString(FLAG, "0"))) {
  37.  
    Log.d(tag, "已正常运行,不需要显示提示界面了");
  38.  
    this.setTheme(android.R.style.Theme_NoDisplay);
  39.  
    lockMyPhone();
  40.  
    }
  41.  
    needDeviceManager = true;
  42.  
    Log.d(tag, "不能正常锁屏,需要提示用户去设置权限");
  43.  
    setContentView(R.layout.activity_main);
  44.  
    this.tvMemo = this.findViewById(R.id.tvMemo);
  45.  
    this.imageView = this.findViewById(R.id.imgPic);
  46.  
    }
  47.  
     
  48.  
    @Override
  49.  
    protected void onStart() {
  50.  
    super.onStart();
  51.  
    Log.d(tag, "--onStart 厂商:" Build.BRAND ", 型号:" android.os.Build.MODEL);
  52.  
    if (needDeviceManager) requestDeviceManager();
  53.  
    String brand = Build.BRAND;
  54.  
    if (brand == null) brand = "";
  55.  
    else brand = brand.toLowerCase(Locale.ROOT);
  56.  
    if (brand.contains("vivo")) {//针对不同设备做个性化提醒,这里就不继续做了,意思一下
  57.  
    this.tvMemo.setText("应用需要权限才能使用,您可以到“设置-更多设置-安全-设备管理器”中,激活本应用的管理权限,如下图所示:");
  58.  
    this.imageView.setImageResource(R.drawable.dev_manager_vivo);
  59.  
    } else {
  60.  
    this.tvMemo.setText("应用需要权限才能使用,您需要找到您手机的“设备管理器”功能,激活本应用的管理权限,类似下图所示:");
  61.  
    this.imageView.setImageResource(R.drawable.dev_manager_vivo);
  62.  
    }
  63.  
    }
  64.  
     
  65.  
    @Override
  66.  
    protected void onResume() {
  67.  
    super.onResume();
  68.  
    Log.d(tag, "--onResume");
  69.  
    }
  70.  
     
  71.  
    private void lockMyPhone() {
  72.  
    try {
  73.  
    policyManager.lockNow();
  74.  
    preferences.edit().putString(FLAG, "1").apply();
  75.  
    MainActivity.this.finish();
  76.  
    } catch (SecurityException e) {
  77.  
    Log.e(tag, "未获得权限");
  78.  
    }
  79.  
    }
  80.  
     
  81.  
    @Override
  82.  
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  83.  
    super.onActivityResult(requestCode, resultCode, data);
  84.  
    Log.d(tag, "--onActivityResult =" resultCode);
  85.  
    }
  86.  
     
  87.  
    private void requestDeviceManager() {
  88.  
    Log.d(tag, "准备请求管理器权限");
  89.  
    ComponentName componentName = new ComponentName(MainActivity.this, LockPhoneReceiver.class);
  90.  
    if (policyManager == null) {
  91.  
    Log.d(tag, "无法获得设备安全管理器");
  92.  
    return;
  93.  
    }
  94.  
    //使用隐式意图调用系统方法来激活指定的设备管理器
  95.  
    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
  96.  
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
  97.  
    intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "一键锁屏");
  98.  
    this.startActivityForResult(intent, 0);
  99.  
    }
  100.  
     
  101.  
    private static class LockPhoneReceiver extends DeviceAdminReceiver {
  102.  
    @Override
  103.  
    public void onReceive(Context context, Intent intent) {
  104.  
    super.onReceive(context, intent);
  105.  
    Log.d(tag, "onreceiver");
  106.  
    }
  107.  
     
  108.  
    @Override
  109.  
    public void onEnabled(Context context, Intent intent) {
  110.  
    super.onEnabled(context, intent);
  111.  
    Log.d(tag, "激活使用");
  112.  
    }
  113.  
     
  114.  
    @Override
  115.  
    public void onDisabled(Context context, Intent intent) {
  116.  
    super.onDisabled(context, intent);
  117.  
    Log.d(tag, "取消激活");
  118.  
    }
  119.  
    }
  120.  
    }
学新通

3,MyDeviceAdminReceiver

  1.  
    package net.csdn.bigc2001.lockmyphone;
  2.  
     
  3.  
    import android.app.admin.DeviceAdminReceiver;
  4.  
    import android.content.BroadcastReceiver;
  5.  
    import android.content.Context;
  6.  
    import android.content.Intent;
  7.  
    import android.os.Handler;
  8.  
    import android.preference.PreferenceManager;
  9.  
    import android.util.Log;
  10.  
     
  11.  
    public class MyDeviceAdminReceiver extends DeviceAdminReceiver {
  12.  
    private static final String tag = " >DeviceAdminReceiver";
  13.  
     
  14.  
    @Override
  15.  
    public void onReceive(Context context, Intent intent) {
  16.  
    super.onReceive(context, intent);
  17.  
    Log.d(tag, "设备管理:onReceive");
  18.  
    }
  19.  
     
  20.  
    @Override
  21.  
    public void onEnabled(Context context, Intent intent) {
  22.  
    // 设备管理:可用
  23.  
    Log.d(tag, "设备管理:可用");
  24.  
    PreferenceManager.getDefaultSharedPreferences(context).edit().putString(MainActivity.FLAG, "1").apply();
  25.  
    }
  26.  
     
  27.  
    @Override
  28.  
    public void onDisabled(final Context context, Intent intent) {
  29.  
    // 设备管理:不可用
  30.  
    Log.d(tag, "设备管理:不可用");
  31.  
    }
  32.  
     
  33.  
    @Override
  34.  
    public CharSequence onDisableRequested(Context context, Intent intent) {
  35.  
    Log.d(tag, "==onDisableRequested");
  36.  
    return "这是一个可选的消息,警告有关禁止用户的请求";
  37.  
    }
  38.  
     
  39.  
    }
学新通

4,res\layout\activity_main.xml

  1.  
    <?xml version="1.0" encoding="utf-8"?>
  2.  
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.  
    xmlns:app="http://schemas.android.com/apk/res-auto"
  4.  
    xmlns:tools="http://schemas.android.com/tools"
  5.  
    android:layout_width="match_parent"
  6.  
    android:layout_height="match_parent"
  7.  
    android:layout_margin="10dp"
  8.  
    tools:context=".MainActivity">
  9.  
     
  10.  
    <TextView
  11.  
    android:id="@ id/tvMemo"
  12.  
    android:layout_width="wrap_content"
  13.  
    android:layout_height="wrap_content"
  14.  
    app:layout_constraintLeft_toLeftOf="parent"
  15.  
    app:layout_constraintTop_toTopOf="parent" />
  16.  
     
  17.  
    <ScrollView
  18.  
    android:layout_width="match_parent"
  19.  
    android:layout_height="wrap_content"
  20.  
    android:orientation="vertical"
  21.  
    app:layout_constraintLeft_toLeftOf="@id/tvMemo"
  22.  
    app:layout_constraintTop_toBottomOf="@id/tvMemo">
  23.  
     
  24.  
    <ImageView
  25.  
    android:id="@ id/imgPic"
  26.  
    android:layout_width="wrap_content"
  27.  
    android:layout_height="wrap_content" />
  28.  
    </ScrollView>
  29.  
     
  30.  
    </androidx.constraintlayout.widget.ConstraintLayout>
学新通

5,res\xml\device_admin.xml

  1.  
    <?xml version="1.0" encoding="utf-8"?>
  2.  
    <device-admin xmlns:android="http://schemas.android.com/apk/res/android">
  3.  
    <uses-policies>
  4.  
    <force-lock />
  5.  
    </uses-policies>
  6.  
    </device-admin>

全部代码也就这么多了,编译后尝试使用,发现不能自动弹出“设备管理器”,但是手动在设备管理器里激活(或启用)自己作得这个APP后,可以一键锁屏。不能自动弹出的问题以后有机会再摸索吧。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfaebb
系列文章
更多 icon
同类精品
更多 icon
继续加载