Java 在服务中满足条件时立即启动/取消活动
因此,我正在为android构建一个应用程序锁定器。我为我的锁定器活动编写了一个服务,在android应用程序堆栈顶部检测到特定活动时立即启动。要锁定的应用程序列表存储在数据库的一个表中。在大多数情况下,我的服务工作正常。但我面临一些我不知道的问题知道如何克服困难。任何帮助都是可以接受的 我想解决以下问题 1) 当我按下后退按钮时,我希望我的锁柜活动和要锁定的应用程序停止执行。在我的例子中,当我按下后退按钮时,锁活动会一次又一次地启动 2) 当需要锁定的特定应用程序启动时,在调用我的locker活动之前,该应用程序会在屏幕上显示1秒或2秒。我希望直接调用我的locker活动 3) 有时,一旦用户已经验证了自己的身份(这是不想要的),就会再次调用我的locker活动。(我认为这是服务检查前台活动的时间安排的原因) 我的服务Java 在服务中满足条件时立即启动/取消活动,java,android,security,service,Java,Android,Security,Service,因此,我正在为android构建一个应用程序锁定器。我为我的锁定器活动编写了一个服务,在android应用程序堆栈顶部检测到特定活动时立即启动。要锁定的应用程序列表存储在数据库的一个表中。在大多数情况下,我的服务工作正常。但我面临一些我不知道的问题知道如何克服困难。任何帮助都是可以接受的 我想解决以下问题 1) 当我按下后退按钮时,我希望我的锁柜活动和要锁定的应用程序停止执行。在我的例子中,当我按下后退按钮时,锁活动会一次又一次地启动 2) 当需要锁定的特定应用程序启动时,在调用我的locker
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");
}
}
公共类锁服务扩展服务{
私有静态最终字符串TAG=“MyService”;
字符串锁定apps[];
字符串allowedapp=null;
数据库处理程序;
私有最终静态处理程序servicehandler=新处理程序(){
@凌驾
公共无效handleMessage(消息消息消息){
}
};
@凌驾
public void onCreate(){
//TODO自动生成的方法存根
super.onCreate();
handler=新的DataBaseHandler(此);
}
@凌驾
公共IBinder onBind(意向){
//TODO自动生成的方法存根
返回null;
}
private Runnable checkforeground=new Runnable(){
公开募捐{
///您想做的任何事情都可以像web服务一样将代码放在这里
//它将在1秒内运行
handler.open();
LockedApps=handler.getPackages();
handler.close();
ActivityManager am=(ActivityManager)getSystemService(Context.ACTIVITY_服务);
列表runningAppProcessInfo=am
.getRunningAppProcesses();
String foregroundapp=runningAppProcessInfo.get(0).processName
.toString();
SharedReferences sp=首选项管理器
.getDefaultSharedReferences(LockerService.this);
allowedapp=sp.getString(“allowedapp”、“anon”);
if((Arrays.asList(LockedApps.contains)(foregroundapp))
&&(allowedapp.equals(foregroundapp))){
//无所事事
}else if(Arrays.asList(LockedApps.contains)(foregroundapp)){
//在屏幕上方显示您的活动
//包名称。活动名称
Intent lockIntent=newintent(getBaseContext(),Locker.class);
lockIntent.addFlags(Intent.FLAG\u活动\u新任务);
getBaseContext().startActivity(lockIntent);
}
servicehandler.postDelayed(这是1500);//1.5秒
}
};
@凌驾
公共无效启动(Intent Intent,int startId){
servicehandler.removeCallbacks(检查前台);
servicehandler.postDelayed(检查前景,1500);//1.5秒
Log.d(标签“onStart”);
}
}
只需覆盖locker活动中的onBackPressed()方法,并向主启动器发出一个意向。这没什么,但它将带您进入主屏幕