android安全问题之程序锁
来源:互联网 发布:网络推广客服专员 编辑:程序博客网 时间:2024/04/27 19:16
原理:
启动服务扫描运行中的task栈,取出task中的topActivity,然后进行判断,如果是你想锁定的应用,然后弹出一个需要输入密码的activity对原程序进行覆盖,当验证通过才让用户使用应用。
代码如下:
启动类MainActivity(也可使用广播作为入口):
package com.home.testlock;import android.app.Activity;import android.content.Intent;import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);startService(new Intent(this, LockService.class));}}
程序锁的后台服务类LockService:
package com.home.testlock;import java.util.Timer;import android.app.Notification;import android.app.Service;import android.content.Intent;import android.os.IBinder;/** * 程序锁的后台服务类 * */public class LockService extends Service {private Timer timer;// 定时器public static final int FOREGROUND_ID = 0;@Overridepublic IBinder onBind(Intent arg0) {return null;}@Overridepublic void onCreate() {super.onCreate();startForeground(FOREGROUND_ID, new Notification());}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {startTimer();return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {stopForeground(true);timer.cancel();timer.purge();timer = null;super.onDestroy();}/** * 启动定时器任务 */private void startTimer() {if (timer == null) {timer = new Timer();LockTask lockTask = new LockTask(this);timer.schedule(lockTask, 0L, 1000L);}}}
程序锁的任务类LockTask:
package com.home.testlock;import java.util.TimerTask;import android.app.ActivityManager;import android.content.ComponentName;import android.content.Context;import android.content.Intent;/** * 程序锁的任务类 * * */public class LockTask extends TimerTask {private Context mContext;// 这是笔者自己手机上的测试应用private String testPackageName = "com.lovo.sport";private String testClassName = "com.lovo.ui.RegistActivity";private ActivityManager am;public LockTask(Context context) {mContext = context;am = (ActivityManager) mContext.getSystemService("activity");}@Overridepublic void run() {ComponentName cn = am.getRunningTasks(1).get(0).topActivity;String packageName = cn.getPackageName();String className = cn.getClassName();if (SharedUtil.getIntence().getIsFinished(mContext)) {return;}// 如果想对整个程序锁定判断包名即可if (testPackageName.equals(packageName)&& testClassName.equals(className)) {Intent intent = new Intent();intent.setClassName("com.home.testlock","com.home.testlock.PWDActivity");intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);mContext.startActivity(intent);}}}
PWDActivity:
package com.home.testlock;import android.app.Activity;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class PWDActivity extends Activity implements OnClickListener {private Button sureBtn;private EditText pwdText;private static final String PASSWORD = "1234";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.pwd);initWidget();}private void initWidget() {sureBtn = (Button) findViewById(R.id.pwd_btn_sure);pwdText = (EditText) findViewById(R.id.pwd_et);sureBtn.setOnClickListener(this);}@Overridepublic void onClick(View v) {if (v == sureBtn) {String pwd = pwdText.getText().toString();if (PASSWORD.equals(pwd)) {SharedUtil.getIntence().saveIsFinished(this, true);finish();}}}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (KeyEvent.KEYCODE_BACK == keyCode) {return true;// 屏蔽返回键}return super.onKeyDown(keyCode, event);}}
SharedUtil:
package com.home.testlock;import android.content.Context;import android.content.SharedPreferences;/** * 处理SharedPreferences工具类 * * @author 孤云 * */public class SharedUtil {private static SharedUtil shared;/** * 使用单例模式获取SharedUtil实例 * * @return */public static synchronized SharedUtil getIntence() {if (shared == null) {shared = new SharedUtil();}return shared;}/** * 获取是否验证过密码 * * @param context * @return */public boolean getIsFinished(Context context) {SharedPreferences sp = context.getSharedPreferences("data",Context.MODE_PRIVATE);boolean isFinished = sp.getBoolean("isFinished", false);return isFinished;}/** * 保存验证逻辑 * * @param context * @param isFinished */public void saveIsFinished(Context context, boolean isFinished) {SharedPreferences sp = context.getSharedPreferences("data",Context.MODE_PRIVATE);sp.edit().putBoolean("isFinished", isFinished).commit();}}
布局文件省略。
权限:
<uses-permission android:name="android.permission.GET_TASKS" />
另外:如果不想某个本程序的某个activity显示在task中,对其activity加如下属性:
android:excludeFromRecents="true"
本文核心代码转自:http://su1216.iteye.com/blog/1699681
请大家不要用root的手机随意下载软件,更不要以任何借口制造任何病毒!
0 0
- android安全问题之程序锁
- android安全问题(二) 程序锁
- android安全问题(二) 程序锁
- android安全问题(二) 程序锁
- android安全问题(二) 程序锁
- android安全问题(二) 程序锁
- android安全问题(二) 程序锁
- Android安全问题(二) 程序锁
- android安全问题(二) 程序锁
- android安全问题(二) 程序锁
- android安全问题(二) 程序锁
- android 开发之安全问题
- android安全问题(三) 钓鱼程序
- android安全问题(三) 钓鱼程序
- android安全问题(三) 钓鱼程序
- android安全问题(三) 钓鱼程序
- android安全问题(三) 钓鱼程序
- Android安全问题(三) 钓鱼程序
- Java基础(十二)-----JDBC(一)
- django update和create外键时出现问题
- Maven Jetty Plugin 配置指南
- Android中PopupWindow的使用方法
- LINUX中编写函数实现system功能
- android安全问题之程序锁
- Eclipse插件开发之FindBugs插件
- 寒假杂记
- mysql数据库函数获取时间中的年月日时分秒
- tomcat一起部署 javaProject 和 j2eeProject
- 1154. Easy sort ……sort
- spring mvc 后台只接收String类型,所以需要对日期类型处理
- 网站压力测试工具 WebBench
- Logical Problems(逻辑推理题)