学做安卓一键锁屏应用
这个手机没有自带一键锁屏,在应用商店也没有搜到,下载了几个“锁屏APP”试试发现要许多权限呢,还是自己做一个吧放心点。其他手机应该也能用吧。
打包好的应用下载:
这篇文章记录了所有的开发源代码,同时编译好的应用也放到了资源区。
1,从AndroidManifest.xml开始:
-
-
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-
package="net.csdn.bigc2001.lockmyphone">
-
-
<application
-
android:allowBackup="false"
-
android:icon="@mipmap/ic_launcher"
-
android:label="@string/app_name"
-
android:roundIcon="@mipmap/ic_launcher_round"
-
android:supportsRtl="true"
-
android:theme="@style/Theme.LockMyPhone">
-
<receiver
-
android:name=".MyDeviceAdminReceiver"
-
android:enabled="true"
-
android:exported="true"
-
android:permission="android.permission.BIND_DEVICE_ADMIN">
-
<meta-data
-
android:name="android.app.device_admin"
-
android:resource="@xml/device_admin" />
-
<intent-filter>
-
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
-
</intent-filter>
-
</receiver>
-
-
<activity
-
android:name=".MainActivity"
-
android:exported="true">
-
<intent-filter>
-
<action android:name="android.intent.action.MAIN" />
-
-
<category android:name="android.intent.category.LAUNCHER" />
-
</intent-filter>
-
</activity>
-
</application>
-
-
</manifest>
2, MainActivity
-
package net.csdn.bigc2001.lockmyphone;
-
-
import android.app.Activity;
-
import android.app.admin.DeviceAdminReceiver;
-
import android.app.admin.DevicePolicyManager;
-
import android.content.ComponentName;
-
import android.content.Context;
-
import android.content.Intent;
-
import android.content.SharedPreferences;
-
import android.os.Build;
-
import android.os.Bundle;
-
import android.preference.PreferenceManager;
-
import android.util.Log;
-
import android.widget.ImageView;
-
import android.widget.TextView;
-
-
import androidx.annotation.Nullable;
-
-
import java.util.Locale;
-
-
public class MainActivity extends Activity {
-
private static final String tag = " >MainActivity";
-
private DevicePolicyManager policyManager;
-
private SharedPreferences preferences;
-
public static final String FLAG = "flag.enable";
-
private boolean needDeviceManager = false;
-
private TextView tvMemo;
-
private ImageView imageView;
-
-
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
Log.d(tag, "--onCreate");
-
policyManager = (DevicePolicyManager) MainActivity.this.getSystemService(Context.DEVICE_POLICY_SERVICE);
-
preferences = PreferenceManager.getDefaultSharedPreferences(this);
-
if ("1".contains(preferences.getString(FLAG, "0"))) {
-
Log.d(tag, "已正常运行,不需要显示提示界面了");
-
this.setTheme(android.R.style.Theme_NoDisplay);
-
lockMyPhone();
-
}
-
needDeviceManager = true;
-
Log.d(tag, "不能正常锁屏,需要提示用户去设置权限");
-
setContentView(R.layout.activity_main);
-
this.tvMemo = this.findViewById(R.id.tvMemo);
-
this.imageView = this.findViewById(R.id.imgPic);
-
}
-
-
-
protected void onStart() {
-
super.onStart();
-
Log.d(tag, "--onStart 厂商:" Build.BRAND ", 型号:" android.os.Build.MODEL);
-
if (needDeviceManager) requestDeviceManager();
-
String brand = Build.BRAND;
-
if (brand == null) brand = "";
-
else brand = brand.toLowerCase(Locale.ROOT);
-
if (brand.contains("vivo")) {//针对不同设备做个性化提醒,这里就不继续做了,意思一下
-
this.tvMemo.setText("应用需要权限才能使用,您可以到“设置-更多设置-安全-设备管理器”中,激活本应用的管理权限,如下图所示:");
-
this.imageView.setImageResource(R.drawable.dev_manager_vivo);
-
} else {
-
this.tvMemo.setText("应用需要权限才能使用,您需要找到您手机的“设备管理器”功能,激活本应用的管理权限,类似下图所示:");
-
this.imageView.setImageResource(R.drawable.dev_manager_vivo);
-
}
-
}
-
-
-
protected void onResume() {
-
super.onResume();
-
Log.d(tag, "--onResume");
-
}
-
-
private void lockMyPhone() {
-
try {
-
policyManager.lockNow();
-
preferences.edit().putString(FLAG, "1").apply();
-
MainActivity.this.finish();
-
} catch (SecurityException e) {
-
Log.e(tag, "未获得权限");
-
}
-
}
-
-
-
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-
super.onActivityResult(requestCode, resultCode, data);
-
Log.d(tag, "--onActivityResult =" resultCode);
-
}
-
-
private void requestDeviceManager() {
-
Log.d(tag, "准备请求管理器权限");
-
ComponentName componentName = new ComponentName(MainActivity.this, LockPhoneReceiver.class);
-
if (policyManager == null) {
-
Log.d(tag, "无法获得设备安全管理器");
-
return;
-
}
-
//使用隐式意图调用系统方法来激活指定的设备管理器
-
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
-
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
-
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "一键锁屏");
-
this.startActivityForResult(intent, 0);
-
}
-
-
private static class LockPhoneReceiver extends DeviceAdminReceiver {
-
-
public void onReceive(Context context, Intent intent) {
-
super.onReceive(context, intent);
-
Log.d(tag, "onreceiver");
-
}
-
-
-
public void onEnabled(Context context, Intent intent) {
-
super.onEnabled(context, intent);
-
Log.d(tag, "激活使用");
-
}
-
-
-
public void onDisabled(Context context, Intent intent) {
-
super.onDisabled(context, intent);
-
Log.d(tag, "取消激活");
-
}
-
}
-
}
3,MyDeviceAdminReceiver
-
package net.csdn.bigc2001.lockmyphone;
-
-
import android.app.admin.DeviceAdminReceiver;
-
import android.content.BroadcastReceiver;
-
import android.content.Context;
-
import android.content.Intent;
-
import android.os.Handler;
-
import android.preference.PreferenceManager;
-
import android.util.Log;
-
-
public class MyDeviceAdminReceiver extends DeviceAdminReceiver {
-
private static final String tag = " >DeviceAdminReceiver";
-
-
-
public void onReceive(Context context, Intent intent) {
-
super.onReceive(context, intent);
-
Log.d(tag, "设备管理:onReceive");
-
}
-
-
-
public void onEnabled(Context context, Intent intent) {
-
// 设备管理:可用
-
Log.d(tag, "设备管理:可用");
-
PreferenceManager.getDefaultSharedPreferences(context).edit().putString(MainActivity.FLAG, "1").apply();
-
}
-
-
-
public void onDisabled(final Context context, Intent intent) {
-
// 设备管理:不可用
-
Log.d(tag, "设备管理:不可用");
-
}
-
-
-
public CharSequence onDisableRequested(Context context, Intent intent) {
-
Log.d(tag, "==onDisableRequested");
-
return "这是一个可选的消息,警告有关禁止用户的请求";
-
}
-
-
}
4,res\layout\activity_main.xml
-
-
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-
xmlns:app="http://schemas.android.com/apk/res-auto"
-
xmlns:tools="http://schemas.android.com/tools"
-
android:layout_width="match_parent"
-
android:layout_height="match_parent"
-
android:layout_margin="10dp"
-
tools:context=".MainActivity">
-
-
<TextView
-
android:id="@ id/tvMemo"
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
app:layout_constraintLeft_toLeftOf="parent"
-
app:layout_constraintTop_toTopOf="parent" />
-
-
<ScrollView
-
android:layout_width="match_parent"
-
android:layout_height="wrap_content"
-
android:orientation="vertical"
-
app:layout_constraintLeft_toLeftOf="@id/tvMemo"
-
app:layout_constraintTop_toBottomOf="@id/tvMemo">
-
-
<ImageView
-
android:id="@ id/imgPic"
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content" />
-
</ScrollView>
-
-
</androidx.constraintlayout.widget.ConstraintLayout>
5,res\xml\device_admin.xml
-
-
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
-
<uses-policies>
-
<force-lock />
-
</uses-policies>
-
</device-admin>
全部代码也就这么多了,编译后尝试使用,发现不能自动弹出“设备管理器”,但是手动在设备管理器里激活(或启用)自己作得这个APP后,可以一键锁屏。不能自动弹出的问题以后有机会再摸索吧。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfaebb
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01