我正在使用它来实现一个安全功能,如果我的应用程序从其他应用程序返回后重新获得焦点,则会显示锁定屏幕.
现在,问题是安全功能有时会显示两次.在挖掘了一下后,我注意到ActivityManager.getRunningTasks(1)中的topActivity有时仍然是您刚刚返回的活动.
就我而言,令人讨厌的挥之不去的应用程序是com.android.mms和com.google.android.apps.maps.
我在应用程序中也有一个呼叫设施,但它没有行为不端.
我对这种行为感到困惑.
我有两个活动都有一个用于登录的GoogleAPIClient.现在发生的事情是当我通过第一个活动进入第二个活动,然后我登录第一个活动,这是屏幕上的活动,应用程序崩溃.当我不从一个活动转到另一个活动时,没有任何事情崩溃.巧合的是,这只发生在第一次活动上.我从1号 - 2号 - 1号 - 2号开始,然后登录了第2个活动,但没有崩溃.
这是我的LogCat:
09-09 14:03:32.192 968-13080/? A/ActivityManager? Activity Manager Crash
java.lang.IllegalArgumentException
at com.android.server.am.ActivityManagerService.isTopOfTask(ActivityManagerService.java:11223)
at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:1629)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2606)
at com.android.server.am.ActivityManagerServiceEx.onTransact(ActivityManagerServiceEx.java:448)
at android.os.Binder.execTransact(Binder.java:446)
09-09 14:03:32.200 31715-31715/<MyPackage> E/AndroidRuntime? FATAL EXCEPTION: main
Process: <MyPackage>, PID: 31715
java.lang.IllegalArgumentException
at android.os.Parcel.readException(Parcel.java:1544)
at android.os.Parcel.readException(Parcel.java:1493)
at android.app.ActivityManagerProxy.isTopOfTask(ActivityManagerNative.java:4517)
at android.app.Activity.isTopOfTask(Activity.java:5448)
at android.app.Activity.startActivityForResult(Activity.java:3857)
at android.app.Activity.startActivity(Activity.java:4090)
Run Code Online (Sandbox Code Playgroud)
我认为它在我的util类上的这行代码崩溃,它使用动画初始化一个活动
public static void startActivityWithAnimations(Activity activity, Intent intent, AnimationUtils.ANIM_STYLE animationStyle) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Bundle animation = ActivityOptions.makeSceneTransitionAnimation(activity).toBundle();
**activity.startActivity(intent, animation);**
} else {
activity.startActivity(intent);
activity.overridePendingTransition(animationStyle.getEnterAnim(), animationStyle.getExitAnim());
}
} …Run Code Online (Sandbox Code Playgroud) 我试图查询UsageStats的UsageStatsManager,与返回的日常使用所有应用程序包的出发点和多长时间.
代码:
public static List<UsageStats> getUsageStatsList(Context context){
UsageStatsManager usm = getUsageStatsManager(context);
Calendar calendar = Calendar.getInstance();
long endTime = calendar.getTimeInMillis();
calendar.add(Calendar.DAY_OF_YEAR, -1);
long startTime = calendar.getTimeInMillis();
List<UsageStats> usageStatsList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,startTime, endTime);
return usageStatsList;
}
Run Code Online (Sandbox Code Playgroud)
我有一个警报,每天在午夜之前触发并查询用户状态,然后存储返回的数据.起初一切似乎工作正常,我得到包结果和他们的活动时间,但是我添加了一个功能,每小时检查一次结果,这是我发现一个奇怪的发现.
结果UsageStatsManager似乎是在不同的时间重置,而不是在午夜,这是我所期望的,考虑到我INTERVAL_DAILY用作搜索参数.
根据我保存的数据包"时间"结果似乎重置(粗略时间):
我意识到封装时序重置之间存在相关性,但这是否意味着发生?
我已经看过以下线程了,我从中得到了很多信息: 如何使用UsageStatsManager?
因此:
Android UsageStatsManager产生错误的输出?
在评论中提到,返回的数据queryUsageStats不可信,并且返回随机结果.
我错过了一些简单的东西还是UsageStatsManager运作不正常?
java android usage-statistics activity-manager usagestatsmanager
我正在开发一个应用程序,我必须覆盖INCOMING CALL SCREEN.
当设备收到呼叫时,我必须显示我的应用程序的弹出窗口.我已经对这项任务进行了详细的研究.CALL POPOUT是一个使用相同功能的应用程序,但我没有得到源代码.
目前我没有几个模块可以通过它来获得INCOMING CALL的动作.
public class MyPhonestateListner extends PhoneStateListener {
Context context;
List<String> blockedNumberList = new ArrayList<String>();
BlockDataSource datasourceobj;
public MyPhonestateListner(Context context) {
super();
this.context = context;
}
@Override
public void onCallStateChanged(int state, String callingNumber) {
super.onCallStateChanged(state, callingNumber);
callingNumber = callingNumber.replace(" ", "");
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
// handle out going call
// if(blockedNumberList.contains(callingNumber))
endCallIfBlocked(callingNumber);
break;
case TelephonyManager.CALL_STATE_RINGING:
// handle in coming call
new Handler().postDelayed(new Runnable() {
public void run() {
Intent intentPhoneCall …Run Code Online (Sandbox Code Playgroud) 我正在努力改善应用活动的显示时间.
我正在使用logcat来跟踪我的活动显示时间.
以下是logcat输出的示例:
I/ActivityManager(1097):显示com.example.myapp/com.example.myapp.activity.TutorialActivity:+ 850ms(总计+ 1s503ms)
有人能告诉我活动经理如何得出结论,这是显示活动的时间吗?
在这段时间内会发生什么以及这段时间会考虑什么?
"正常时间"和"总时间"之间有什么区别?
我试图找到有关此事的材料,但没有成功..
提前谢谢!
我有一个上传活动,我称之为Intent服务.在那里我正在处理API请求调用.
我希望活动知道服务是否正在运行,以显示上传标签.
我尝试了以下来确定服务是否正在运行:
public void startUploadServiceTask() {
if (Util.isNetworkAvailable(mContext)) {
if (!isMyServiceRunning(UploadDriveService.class)) {
startService(new Intent(mContext,
UploadService.class));
}
} else {
Toast.makeText(mContext,
"Service is already running.", Toast.LENGTH_SHORT)
.show();
}
} else {
Toast.makeText(mContext,
getString(R.string.please_check_internet_connection),
Toast.LENGTH_SHORT).show();
}
}
private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager
.getRunningServices(Integer.MAX_VALUE)) {
Log.e("ALL SERVICE", service.service.getClassName().toString());
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
但是在Activity Manager Running Service Info中,我没有得到我正在运行的意向服务类,所以这总是假的.
我已经使用Broadcast for API调用响应.
我甚至检查了这段代码.
if(startService(someIntent) != null) {
Toast.makeText(getBaseContext(), …Run Code Online (Sandbox Code Playgroud) service android android-intent activity-manager android-intentservice
我想获得在android中运行的所有任务.我在ActivityManager中找到getRunningTasks但是从android-5.0中getRunningTasks可能不会给出所有任务(在我的情况下,它给出了主屏幕和我的应用程序).
此外,是否可以找到用户当前正在与之交互的任务?
任何帮助将不胜感激.
谢谢.
编辑:我正在使用下面的代码.但是它只给我一个进程(这是我的应用程序).即使我打开其他应用程序它也没有显示它们.我在One Plus2上运行它.
@Override
protected void onHandleIntent(Intent intent) {
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
getRunningApps();
}
}, 0, 1000);//put here time 1000 milliseconds=1 second
}
public void getRunningApps() {
final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final List<ActivityManager.RunningAppProcessInfo> recentTasks = activityManager.getRunningAppProcesses();
for (int i = 0; i < recentTasks.size(); i++)
{
Log.d("Executed app", "Application executed : " +recentTasks.get(i).pkgList[0]+ "\t\t ID: "+recentTasks.get(i).pid+"");
}
}
Run Code Online (Sandbox Code Playgroud) 尝试在模拟器上运行我的应用程序时,我从activitymanager收到错误:
ActivityManager: Error type 3
Run Code Online (Sandbox Code Playgroud)
我的活动存在,列在清单中(事实上,它是MAIN启动器活动).
谁知道这个错误意味着什么?
从Android L上的ActivityManager服务中获取正在运行的任务列表很容易,并且首先返回当前的活动任务.但它不再适用于Android M,返回列表仅包含我的app任务.有什么方法可以解决它吗?
我的代码:
List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfos = activityManager.getRunningAppProcesses();
for (int i = 0; i < runningAppProcessInfos.size(); i++) {
ActivityManager.RunningAppProcessInfo runningAppProcessInfo = runningAppProcessInfos.get(i);
if (runningAppProcessInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return runningAppProcessInfo.pkgList[0];
}
}
Run Code Online (Sandbox Code Playgroud) 我知道,你可以从任何应用程序启动任何出口活动通过adb使用以下命令:
am start -n com.myapp.test/.TestActivity
Run Code Online (Sandbox Code Playgroud)
使用该"am start"命令还可以向活动发送额外的数据(我知道如何做到这一点,这不是我在这里问的问题!).
但是,我需要知道的是,是否还可以接收从已启动活动完成后发回的响应数据?