所以我正在为android构建一个应用程序锁定器。一旦在android应用程序堆栈上检测到特定活动,我就会为我的锁定器活动编写一个服务来启动。要锁定的应用程序列表存储在在数据库中的一个表。在大多数情况下,我的服务工作正常。但我面临一些我不知道如何克服的问题。非常接受任何帮助
我想解决以下问题。
1)当我按下后退按钮时,我想要我的储物柜活动和正在锁定的应用程序停止执行。在我的情况下,当我按下后退按钮时,锁定性会一次又一次地启动。
2)当需要锁定的特定应用程序启动时,应用程序会在我的更衣室活动被调用之前在屏幕上显示1秒或2秒。我希望直接调用我的储物柜活动。
3)有些时候,一旦用户已经验证了自己不想要的内容,我的锁柜活动就会被再次调用。 (我认为这是检查前台活动的服务时间的原因)
我的服务
public class LockerService extends Service {
private static final String TAG = "MyService";
String LockedApps[];
String allowedapp = null;
DataBaseHandler handler;
private final static Handler servicehandler = new Handler() {
@Override
public void handleMessage(Message msg) {
}
};
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
handler = new DataBaseHandler(this);
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
private Runnable checkforeground = new Runnable() {
public void run() {
// / Any thing you want to do put the code here like web service
// procees it will run in ever 1 second
handler.open();
LockedApps = handler.getPackages();
handler.close();
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am
.getRunningAppProcesses();
String foregroundapp = runningAppProcessInfo.get(0).processName
.toString();
SharedPreferences sp = PreferenceManager
.getDefaultSharedPreferences(LockerService.this);
allowedapp = sp.getString("allowedapp", "anon");
if ((Arrays.asList(LockedApps).contains(foregroundapp))
&& (allowedapp.equals(foregroundapp))) {
// do nothing
} else if (Arrays.asList(LockedApps).contains(foregroundapp)) {
// show your activity here on top of
// PACKAGE_NAME.ACTIVITY_NAME
Intent lockIntent = new Intent(getBaseContext(), Locker.class);
lockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getBaseContext().startActivity(lockIntent);
}
servicehandler.postDelayed(this, 1500); // 1.5 seconds
}
};
@Override
public void onStart(Intent intent, int startId) {
servicehandler.removeCallbacks(checkforeground);
servicehandler.postDelayed(checkforeground, 1500);// 1.5 second
Log.d(TAG, "onStart");
}
}
答案 0 :(得分:1)
在更衣室活动中覆盖onBackPressed()方法并向主启动器发出意图。这不过是它会带你到主屏幕。