为了保护自己的隐私或者是手机权限管理,有时候是需要对程序启动作一个保护。那么下面代码就可以实现对其它的程序进行管理,加锁(需要密码启动)
项目源码: AppSystem
package com.xinhui.service; import java.util.ArrayList; import java.util.List; import com.xinhui.data.HandleDB; import com.xinhui.ui.LockAppActivity; import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.util.Log; /** * 类名称:WatchAppService * 类描述:监听应用程序的后台服务,并对启动的应用程序进行操作 * 创建人:LXH * 创建时间:2013-10-21 上午10:30:00 */ public class WatchAppService extends Service { private HandleDB handleDB; private boolean flag = true; private Intent intentLockAppActivity; private ActivityManager activityManager; public static String runningApp = null; public static String lastRunningApp = null; //public static boolean isLock = false; @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); Log.e("info", "service已经启动"); handleDB = new HandleDB(this); intentLockAppActivity = new Intent(this,LockAppActivity.class); // 服务里面是没有任务栈的,所以要指定一个新的任务栈,不然是无法在服务里面启动activity的 //intentLockAppActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); activityManager = (ActivityManager) getSystemService(Service.ACTIVITY_SERVICE); new ArrayList(); new Thread(){ @Override public void run() { // TODO Auto-generated method stub super.run(); while(flag){ try{ // 得到当前运行的任务栈,参数就是得到多少个任务栈,1就是只拿一个任务栈 // 对应的也就是正在运行的任务栈啦 ,注意别忘了在清单文件中添加获取的权限 List runTaskInfos = activityManager.getRunningTasks(1); //拿到当前运行的任务栈 RunningTaskInfo runningTaskInfo = runTaskInfos.get(0); //拿到要运行的Activity的包名 String runningpackageName = runningTaskInfo.topActivity.getPackageName(); //判断监听的运行包是否加锁 if(handleDB.find(runningpackageName)){ runningApp = runningpackageName; //解决反复出现验证页面BUG: //如果runningApp.equals(lastRunningApp)=true //则说明当前栈顶运行的程序已经解锁了 if((runningApp.equals(lastRunningApp)) == false){ intentLockAppActivity.putExtra("packageName", runningpackageName); intentLockAppActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intentLockAppActivity); } }else{ } //让线程每半秒执行一次 sleep(500); }catch(InterruptedException e){ e.printStackTrace(); } } } }.start(); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); //flag = false; } }
package com.xinhui.ui; import android.graphics.drawable.Drawable; /** * 类名称:AppInfo * 类描述:应用程序类,包括了程序相关属性 * 创建人:LXH * 创建时间:2013-10-21 上午10:30:00 */ public class AppInfo { private Drawable icon; private String appName; private String packageName; private boolean isSystemApp; private long codesize; public long getCodesize() { return codesize; } public void setCodesize(long codesize) { this.codesize = codesize; } public Drawable getIcon() { return icon; } public void setIcon(Drawable icon) { this.icon = icon; } public String getAppName() { return appName; } public void setAppName(String appName) { this.appName = appName; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } public boolean isSystemApp() { return isSystemApp; } public void setSystemApp(boolean isSystemApp) { this.isSystemApp = isSystemApp; } }
package com.xinhui.ui; import com.xinhui.appsystem.R; import com.xinhui.service.WatchAppService; import android.app.Activity; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.InputType; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; /** * 类名称:LockAppActivity * 类描述:系统锁页面 * 创建人:LXH * 创建时间:2013-10-21 上午10:30:00 */ public class LockAppActivity extends Activity implements OnClickListener,OnTouchListener{ private ImageView ivLockAppIcon; private TextView tvLockAppName; private EditText etInputPwd; private Button btnConfirm; private String packageName; private String passWord; private SharedPreferences preferences; //public static boolean isLock; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.input_pwd); //WatchAppService.isLock = false; Log.e("test", "onCreate--->"); ivLockAppIcon = (ImageView) findViewById(R.id.iv_lock_app_icon); tvLockAppName = (TextView) findViewById(R.id.tv_lock_app_name); etInputPwd = (EditText) findViewById(R.id.et_lock_pwd); etInputPwd.setOnTouchListener(this); btnConfirm = (Button) findViewById(R.id.btn_confirm); btnConfirm.setOnClickListener(this); packageName = getIntent().getStringExtra("packageName"); try { //通过包名拿到applicationInfo ApplicationInfo appInfo = getPackageManager().getPackageInfo(packageName, 0).applicationInfo; //应用图标 Drawable app_icon = appInfo.loadIcon(getPackageManager()); //应用的名字 String app_name = appInfo.loadLabel(getPackageManager()).toString(); ivLockAppIcon.setImageDrawable(app_icon); tvLockAppName.setText(app_name); } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //不让用户按后退键 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub //屏蔽后退键 if(KeyEvent.KEYCODE_BACK == event.getKeyCode()) { return true;//阻止事件继续向下分发 } return super.onKeyDown(keyCode, event); } @Override public void onClick(View v) { // TODO Auto-generated method stub String input = etInputPwd.getText().toString().trim(); preferences = getSharedPreferences("passWord", MODE_PRIVATE); passWord = preferences.getString("pwd", ""); if(TextUtils.isEmpty(input)) { Toast.makeText(this, "密码不能为空", Toast.LENGTH_SHORT).show(); } else if(passWord.equals(input)) { WatchAppService.lastRunningApp = WatchAppService.runningApp;//这里赋值,终于解决了反复弹出验证页面的BUG finish(); } else { Toast.makeText(this, "密码错误", Toast.LENGTH_SHORT).show(); etInputPwd.setText("");//置空 } } @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub //这样是在触摸到控件时,软键盘才会显示出来 int inputback = etInputPwd.getInputType(); etInputPwd.setInputType(InputType.TYPE_NULL); new KeyboardUtil(this, this, etInputPwd).showKeyboard(); etInputPwd.setInputType(inputback); return false; } }
项目源码: AppSystem
收藏的用户(0) X
正在加载信息~
推荐阅读
android手势GestureDetector和OnGestureListener深入解析
站点信息
- 文章2300
- 用户1336
- 访客10870658
每日一句
Care and diligence bring luck.
谨慎和勤奋,带来好运气。
谨慎和勤奋,带来好运气。
VIP电影免费观看
解决安卓运行错误Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug
准猿们添加简历7种最佳技能
java.nio.ByteBuffer缓冲区简介
C++实现远程下载EXE并执行
通过C ++生成RGBA图像
Linux查看进程及相关操作常用命令
Android模拟屏幕点击的基本原理
解决vue动态生成el-table-column按钮点击事件
VMware Workstation安装Centos7及常用命令行
Notepad++ 16进制编辑功能
快速入门-如何在Java上使用Redis
Android Studio 提示Session 'app':Error Installing APK
新会员