参考 https://f-droid.org/repository/browse/?fdid=it.reyboz.screenlock
1,写一个页面,主题用android:theme="@android:style/Theme.NoDisplay" 这样就没有闪退的效果。
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.util.Log; import com.example.lenovo.bean.R; public class MainActivity extends Activity { final static int ENABLE_ADMIN = 1; final static int SUCESS = -1; private ComponentName mAdminName = null; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAdminName = new ComponentName(this, AdminManageReceiver.class); DevicePolicyManager mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);//在设备上执行管理政策 if (!mDPM.isAdminActive(mAdminName)) {//如果未激活 showAdminManagement();//打开手机设备管理器 } if (mDPM.isAdminActive(mAdminName)) { mDPM.lockNow();//执行锁屏 } else { Log.e("screenlock", "Unable to lock the phone D:"); } finish(); } private void showAdminManagement() { // TODO Auto-generated method stub Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);//打开手机设备管理器的intent intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminName); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, R.string.desc_enable_admin); startActivityForResult(intent, ENABLE_ADMIN); } }
,2,注册一个设备管理员权限接收器,并绑定权限BIND_DEVICE_ADMIN
import android.app.admin.DeviceAdminReceiver;
public class AdminManageReceiver extends DeviceAdminReceiver { //注册一个接收器接受设备管理器是否激活 }
<activity android:name="it.reyboz.screenslock.MainActivity" android:theme="@android:style/Theme.NoDisplay" android:label="@string/app_name" android:excludeFromRecents="true" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.LAUNCHER" /> <action android:name="android.intent.action.ASSIST" /> </intent-filter> </activity> <receiver android:name="it.reyboz.screenslock.AdminManageReceiver" android:label="@string/app_name" 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>
需要配置强制锁屏
Android 2.2 SDK提供了一个可管理和操作设备的API叫DevicePolicyManager,使用这个API你可以接管手机的应用权限,对手机做出很多大胆的操作,比如锁屏、恢复出厂设置、设置密码、强制清除密码,修改密码、设置屏幕灯光渐暗时间间隔等操作。
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin" />
xml文件如下
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<force-lock /> //强制锁屏,这里还可以配置其他的如恢复出厂设置、设置密码
</uses-policies>
</device-admin>
3,源码地址https://f-droid.org/repo/it.reyboz.screenlock_2_src.tar.gz