Android锁定应用程序
我是新来的人,我搜索了一些问题来帮助我,但我没有明确的答案。Android锁定应用程序
我需要制作一个应用程序来阻止手机上的其他应用程序。 我在市场上见过几个,但我想做一个。 有什么方法可以知道用户何时试图打开应用程序并提出活动? (把密码)。
我试过用FileObserver,但只适用于文件和目录(显然)。 我可以让一个侦听器在启动之前捕获其他应用程序的Intent吗?
我对我的英语表示歉意,感谢您的帮助!
不,你不知道何时启动另一个应用程序而没有某种破解。 这是因为应用程序启动不播放。
你可以做的是创建一个服务运行在固定的时间间隔,比如1000毫秒,它检查什么是非系统应用程序。杀死该应用程序,并从服务弹出密码输入框。如果密码是正确的重新推出该应用程序
下面是一些代码示例
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
List<RunningAppProcessInfo> appProcesses= activityManager.getRunningAppProcesses();
for (RunningAppProcessInfo appProcess : appProcesses) {
try {
if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
if (!lastFrontAppPkg.equals((String) appProcess.pkgList[0])) {
apkInfo = ApkInfo.getInfoFromPackageName(appProcess.pkgList[0], mContext);
if (apkInfo == null || (apkInfo.getP().applicationInfo.flags && ApplicationInfo.FLAG_SYSTEM) == 1) {
// System app continue;
} else if (((apkInfo.getP().versionName == null)) || (apkInfo.getP().requestedPermissions == null)) {
//Application that comes preloaded with the device
continue;
} else {
lastFrontAppPkg = (String) appProcess.pkgList[0];
}
//kill the app
//Here do the pupop with password to launch the lastFrontAppPkg if the pass is correct
}
}
}
} catch (Exception e) {
//e.printStackTrace();
}
}
}
}, 0, 1000);
这里是ApkInfo.getInfoFromPackageName()
/**
* Get the ApkInfo class of the packageName requested
*
* @param pkgName
* packageName
* @return ApkInfo class of the apk requested or null if package name
* doesn't exist
* @see ApkInfo
*/
public static ApkInfo getInfoFromPackageName(String pkgName,
Context mContext) {
ApkInfo newInfo = new ApkInfo();
try {
PackageInfo p = mContext.getPackageManager().getPackageInfo(
pkgName, PackageManager.GET_PERMISSIONS);
newInfo.appname = p.applicationInfo.loadLabel(
mContext.getPackageManager()).toString();
newInfo.pname = p.packageName;
newInfo.versionName = p.versionName;
newInfo.versionCode = p.versionCode;
newInfo.icon = p.applicationInfo.loadIcon(mContext
.getPackageManager());
newInfo.setP(p);
} catch (NameNotFoundException e) {
e.printStackTrace();
return null;
}
return newInfo;
}
有办法做到这一点。你可以知道应用程序何时启动。 您可以使用packagemanager类获取有关任何已安装和正在使用的应用程序的所有信息。并使用下面的代码就知道whwn该应用程序启动
@Override
public void run() { Log.i("test","detector run");
try {
Process process;
process = Runtime.getRuntime().exec(ClearLogCatCommand);
process = Runtime.getRuntime().exec(LogCatCommand);
br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
// Check if it matches the pattern
while(((line=br.readLine()) != null) && !this.isInterrupted()){
Log.d("Detector", "RUN"+line);
// Ignore launchers
if (line.contains("cat=[" + Intent.CATEGORY_HOME + "]")) continue;
Matcher m = ActivityNamePattern.matcher(line);
if (!m.find()) continue;
if (m.groupCount()<2){
// Log.d("Detector", "Unknown problem while matching logcat output. Might be SDK version?");
continue;
}
if (mListener!=null) mListener.onActivityStarting(m.group(1), m.group(2));
Log.i("Detector", "Found activity launching: " + m.group(1) + "/ " + m.group(2));
}
} catch (IOException e) {
e.printStackTrace();
}
}
它工作....检测所有其他应用程序? – Vikky
是......是检测设备上其他应用程序的唯一方法 –
我试图使用此代码,但有一些我做错了。请你可以提供更多的代码来使用它。谢谢。截图:http://oi57.tinypic.com/28b8gmd.jpg –
您现在可以使用AccessibilityService,使您可以找出哪些活动是在顶部。
在AccessibilityService类:
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
ComponentName componentName = new ComponentName(
event.getPackageName().toString(),
event.getClassName().toString()
);
ActivityInfo activityInfo = tryGetActivity(componentName);
boolean isActivity = activityInfo != null;
if (isActivity) {
Log.i("CurrentActivity", componentName.flattenToShortString());
}
}
}
您必须在您的手机设置,可以转到设置>无障碍>服务>您的应用程序来完成转向辅助功能上。您还需要在Manifest中添加一些权限。大量的信息可以在Android开发者网站上找到:http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html
希望这有助于!
感谢您的好主意。你能说更多关于'tryGetActivity(componentName)'方法的解释吗? –
每秒检查一次的服务会在几个小时内耗尽您的电池。制作启动器/家庭应用程序不是更好吗? – Erdal
你是对的!但这不是我想要的。感谢您的回答! – ngbl