为了保护自己的隐私或者是手机权限管理,有时候是需要对程序启动作一个保护。那么下面代码就可以实现对其它的程序进行管理,加锁(需要密码启动)
项目源码: 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
正在加载信息~
推荐阅读
站点信息
- 文章2313
- 用户1336
- 访客11757403
每日一句
Life is short; Live it!
人生苦短,活出精彩。
人生苦短,活出精彩。
信鸽推送报错NSObject checkTargetOtherLinkFlagForObjc
简单利用Clover四叶草安装U盘安装黑苹果
学习使用Java注解
OllyDbg中如何找出B模块中所有调用了A模块的C方法的地方
解决SSH客户端中文乱码
10年后,Android应用程序仍然比iOS应用程序差
C++11特性里面的thread
XPosed微信自动生成二维码
解决android studio "found an invalid color"的问题
T9社区注册方法【勼适様鲃女尔懟死】
Thinkpad x1 Extreme黑苹果10.14.5安装完成
基于大白主题增加图片本地化的功能
Linux系统查看CPU使用率的几个命令
新会员