Android实战教程第六篇之一键锁屏应用问题解决

上一篇,初步开发了这个应用,功能都有了(见http://www.jb51.net/article/96992.htm 点击打开链接)。

但是遗留了两个问题:1、还是无法卸载;2、必须手动去点击应用程序进入程序,再点击按钮,这显得很麻烦。

这一篇就解决上面两个问题,做出最好的效果。

首先解决无法卸载问题:

在清单文件中,再配置一键卸载的主活动(两个主活动无所谓,只不过在桌面上显示两个图标而已,其实仍然是一个应用)

<activity
   android:name="com.itydl.lockscreen.Remove"
   android:label="一键卸载" >
   <intent-filter>
    <action android:name="android.intent.action.MAIN" /> 

    <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
  </activity>

在新建的活动里面,写取消激活和卸载的代码:

package com.itydl.lockscreen; 

import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View; 

public class Remove extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  //
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_remove);
 } 

 public void remove(View v){
  //调用卸载的界面,要去上层源码中看一下卸载界面的意图是什么。通过查看源码,如下:
  /**
   * <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <action android:name="android.intent.action.DELETE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="package" />
   </intent-filter>
   */ 

  //在卸载之前首先要取消设激活设备管理器
  //获取设备管理器
  DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
  ComponentName who = new ComponentName(this,DeviceAdminSample.class);
  dpm.removeActiveAdmin(who);//Remove a current administration component. This can only be called by the application that owns the administration component 

  //卸载,启动卸载界面
  Intent remove = new Intent("android.intent.action.DELETE");
  remove.addCategory("android.intent.category.DEFAULT");
  remove.setData(Uri.parse("package:"+getPackageName()));//表示卸载本程序,Return the name of this application's package. 

  startActivity(remove);//卸载用户apk界面
 }
}

但是要注意一点,新建的一键卸载布局,一定做以下修改:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent" > --------------------这里一定修改。 

 <Button
  android:onClick="remove"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="一键卸载" /> 

</RelativeLayout>

运行程序,当用户想要卸载的时候,点击一键卸载进入卸载界面,即可对这个应用完成卸载了。
最后在用户体验上做点文章:
这个时候,一键锁屏是通过点击按钮实现的,为了省事,不要开启锁屏的界面。
把锁屏界面按钮全部删掉,背景设置为透明色

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="#00000000">
 ---------------------设置为透明色 

</RelativeLayout> 

在锁屏活动的onCreat方法里面加入一句代码:lockScreen(null);表示不需要任何view去启动点击事件。
这样打开应用的时候就调用lockScreen(View v)里面的锁屏或者开启设备管理器功能,代码如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 dmp = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
 lockScreen(null);
}

同时,一键卸载的应用也做以上同样的事情:

重新运行程序,一运行就进入激活设备管理器界面。现在把一键锁屏图标放置到主界面,一点击就锁屏,特别的方便。而且想卸载这个程序的时候,一点击就直接卸载掉了。

到现在为止,这个应用,完美开发完毕,秒杀市面上99%的一键锁屏应用。

下面是应用的截图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 轻松实现Android锁屏功能

    锁屏需要引入设备超级管理员.在文档Android开发文档的Administration中有详细的说明.Android设备管理系统功能和控制访问. 主要有一下几个步骤: 1  创建广播接收者,实现DeviceAdminReceiver package com.andy.lockscreen; import android.app.admin.DeviceAdminReceiver; /** * @author Zhang,Tianyou * @version 2014年11月20日 下午9:51:

  • Android屏幕锁屏弹窗的正确姿势DEMO详解

    在上篇文章给大家介绍了Android程序开发仿新版QQ锁屏下弹窗功能.今天通过本文给大家分享android锁屏弹窗的正确姿势. 最近在做一个关于屏幕锁屏悬浮窗的功能,于是在网上搜索了很多安卓屏幕锁屏的相关资料,鉴于网上的资料比较零碎,所以我在这里进行整理总结.本文将从以下两点对屏幕锁屏进行解析: 1. 如何监听系统屏幕锁屏 2. 如何在锁屏界面弹出悬浮窗 如何监听系统屏幕锁屏 经过总结,监听系统的锁屏可以通过以下两种方式: 1) 代码直接判定 2) 接收广播 1) 代码直接判定 代码判断方式,也

  • Android编程获取系统隐藏服务实现锁屏的方法

    本文实例讲述了Android编程获取系统隐藏服务实现锁屏的方法.分享给大家供大家参考,具体如下: 实现原理:当按锁屏键时,会发出一个广播,当界面接收到一个广播就可以实现锁频.我们可以调用IDevicePolicyManager服务中的lockNow方法来发送一个广播实现锁屏. IDevicePolicyManager是被系统隐藏掉的,需要通过反射还获取此服务. 步骤: 1.创建MyAdmin的广播接收者继承DeviceAdminReceiver 2.通过反射 ,获取IDevicePolicyMa

  • 设置Android系统永不锁屏永不休眠的方法

    在进行Android系统开发的时候,有些特定的情况需要设置系统永不锁屏,永不休眠.本篇文章给大家介绍Android 永不锁屏,开机不锁屏,删除设置中休眠时间选项,需要的朋友一起学习吧. Android 6.0.1 Create:2016-02-29 1.Settings 删掉屏幕待机选项 packages/apps/Settings/res/xml/display_settings.xml <!-- Hide screen sleep <ListPreference android:key=&

  • Android编程实现禁止系统锁屏与解锁亮屏的方法

    本文实例讲述了Android编程实现禁止系统锁屏与解锁亮屏的方法.分享给大家供大家参考,具体如下: 需求: 某个时刻任务执行完毕,关闭屏幕,某时刻再开启屏幕继续执行任务 通常情况下,不设置屏幕常亮,系统会自动锁屏,锁屏后不能从代码解锁(疑问),所以我的做法是只让系统关闭屏幕,但不锁屏! WakeLock lock, unLock; KeyguardManager km; KeyguardLock kl; unLock = pm.newWakeLock(PowerManager.ACQUIRE_C

  • Android 监听锁屏、解锁、开屏 功能代码

    1.首先定义 ScreenListener package com.app.lib; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.PowerManager; /** * Created by ${zyj} on 2016/6

  • android禁止锁屏保持常亮(示例代码)

    在播放video的时候在mediaplayer mMediaPlayer.setScreenOnWhilePlaying(true); 已经设置了,在原生的android没有问题和在defy上也没有问题,一到三星的galaxy上就有问题,不知道三星他们改了哪些地方.一般的话设置了播放视频屏幕没有自动.但是在三星上就出了问题. 只好再找找.一般的话设置有两种方法. 如下: 复制代码 代码如下: 1. getWindow().addFlags(WindowManager.LayoutParams.F

  • Android实战教程第五篇之一键锁屏应用

    Device Administration 对于这个应用,市场上很多,但是看一下评论就知道效果有多差了,因为99%一键锁屏应用没办法卸载.今天就开发一个小应用,实现轻松点击一键锁屏,同时支持卸载... 通查看谷歌原文档,有设备管理器的API,从这里可以抽取一些代码,开发出一个小应用,即即将介绍的<一键锁屏>. 根据文档翻译,获取设备管理器的大致步骤如下: 1.创建类DeviceAdminReceiver的子类 如:com.itydl.lockscreen.DeviceAdminSample 2

  • Android编程之自定义锁屏实例分析

    本文实例讲述了Android编程之自定义锁屏.分享给大家供大家参考,具体如下: 花了半天时间研究下了自定义锁屏,发现其实实现并不是很神秘.不过有些地方还是值得注意. 首先说流程,锁屏界面一般是在关闭屏幕时启用,打开屏幕时展现在我们面前,所以我们知道了锁屏的时机,恰好屏幕开关会发出相应的广播,所以我们也可以像系统一样捕获到屏幕开关的事件. 广播对应的两个action 引用 android.intent.action.SCREEN_ON android.intent.action.SCREEN_OF

  • Android编程实现一键锁屏的方法

    本文实例讲述了Android编程实现一键锁屏的方法.分享给大家供大家参考,具体如下: 这里要用到下面两个类: DeviceAdminReceiver 设备管理组件.这个类提供了一个方便解释由系统发出的意图的动作.你的设备管理应用程序必须包含一个DeviceAdminReceiver的子类.本程序中,就代表一个手机上的设备管理器. DevicePolicyManager 一个管理设备上规范的类. 大多数客户端必须声明一个用户当前已经启用的DeviceAdminReceiver. 这个DeviceP

随机推荐