java - startActivity() 在 Runnable 接口中不起作用
问题描述
我的项目中有一个服务类(SaveMyAppsService.java
),一旦启动,它将检查前台应用程序,如果当前前台应用程序的包名称与List<String> lockedApps
包含锁定应用程序包名称的匹配,它应该启动另一个活动CustomPinActivity
,但它不工作!
PS:我可以mytag
在 Logcat 中看到日志。
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
lockedApps = AppPref.getInstance().getAppList(getApplicationContext());
String localPackName = checkRunningApps(); //returns package name of the current foreground app.
if( lockedApps.contains(localPackName) ){
Log.i("mytag","yes this is in lockedApps pref");
if( !allowedApps.contains( localPackName )){
Log.i("mytag","It was not allowed!!!!!!!!!!!!!!!!!!!!!!!!! but now it is");
allowedApps.add( localPackName );
previousAppName = localPackName;
Intent intent = new Intent(SaveMyAppsService.this.getApplicationContext(), CustomPinActivity.class);
intent.putExtra(AppLock.EXTRA_TYPE, AppLock.UNLOCK_PIN);
intent.putExtra("package",checkRunningApps());
startActivity( intent );
checkAllowed();
}
}
}
}, 0, 300, TimeUnit.MILLISECONDS);
解决方案
我认为你应该像这样使用 Handler :
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Bundle bundle = msg.getData();
String localPackName = bundle.getString(AppLock.EXTRA_TYPE);
Intent intent = new Intent(SaveMyAppsService.this.getApplicationContext(), CustomPinActivity.class);
intent.putExtra(AppLock.EXTRA_TYPE, AppLock.UNLOCK_PIN);
intent.putExtra("package",localPackName);
startActivity( intent );
checkAllowed();
}
};
并且您的代码已更新:
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
lockedApps = AppPref.getInstance().getAppList(getApplicationContext());
String localPackName = checkRunningApps(); //returns package name of the current foreground app.
if( lockedApps.contains(localPackName) ){
Log.i("mytag","yes this is in lockedApps pref");
if( !allowedApps.contains( localPackName )){
Log.i("mytag","It was not allowed!!!!!!!!!!!!!!!!!!!!!!!!! but now it is");
allowedApps.add( localPackName );
previousAppName = localPackName;
Message msg = mHandler.obtainMessage();
Bundle bundle = new Bundle();
bundle.putString(AppLock.EXTRA_TYPE, localPackName);
msg.setData(bundle);
mHandler.sendMessage(msg);
}
}
}
}, 0, 300, TimeUnit.MILLISECONDS);
推荐阅读
- c# - asp.net c#中的警报通知通过循环
- ruby-on-rails - Rails:获取时区偏移名称
- sql - Postgres SQL for 循环计算每月现有用户数
- flutter - 涉及未定义运算符的颤振错误
- git - 如何正确地从 Eclipse 提交?
- aws-lambda - ECS 服务在创建时卡住
- python - 服务器上不存在文件时不显示按钮 - 使用 Flask
- android - Android - 我可以将 libs 、 apk 或代码添加到扩展文件中吗?(ob)
- gsl - 使用 GSL C++ 的 Logistic S 曲线的雅可比矩阵
- algorithm - 阻止仙人掌图上的有向路径