标签: activity-manager

isApplicationBroughtToBackground安全功能经常行为不端

我正在使用它来实现一个安全功能,如果我的应用程序从其他应用程序返回后重新获得焦点,则会显示锁定屏幕.

现在,问题是安全功能有时会显示两次.在挖掘了一下后,我注意到ActivityManager.getRunningTasks(1)中的topActivity有时仍然是您刚刚返回的活动.

就我而言,令人讨厌的挥之不去的应用程序是com.android.mms和com.google.android.apps.maps.

我在应用程序中也有一个呼叫设施,但它没有行为不端.

我对这种行为感到困惑.

android activity-manager

8
推荐指数
1
解决办法
388
查看次数

有谁知道如何解决活动管理器崩溃?

我有两个活动都有一个用于登录的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)

android android-activity activity-manager

8
推荐指数
0
解决办法
1766
查看次数

Android:UsageStatsManager没有返回正确的每日结果

我试图查询UsageStatsUsageStatsManager,与返回的日常使用所有应用程序包的出发点和多长时间.

代码:

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用作搜索参数.

根据我保存的数据包"时间"结果似乎重置(粗略时间):

  • 凌晨3点
  • 正午
  • 下午3点
  • 午夜

我意识到封装时序重置之间存在相关性,但这是否意味着发生?

我已经看过以下线程了,我从中得到了很多信息: 如何使用UsageStatsManager?

因此: Android UsageStatsManager产生错误的输出? 在评论中提到,返回的数据queryUsageStats不可信,并且返回随机结果.

我错过了一些简单的东西还是UsageStatsManager运作不正常?

java android usage-statistics activity-manager usagestatsmanager

8
推荐指数
2
解决办法
3923
查看次数

在Android中的TelephonyManager.CALL_STATE_RINGING上将默认传入呼叫屏幕移至背景

我正在开发一个应用程序,我必须覆盖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)

android phone-state-listener activity-manager incoming-call

7
推荐指数
1
解决办法
936
查看次数

"I/ActivityManager:显示......活动...... + 850ms"由什么组成?

我正在努力改善应用活动的显示时间.
我正在使用logcat来跟踪我的活动显示时间.

以下是logcat输出的示例:

I/ActivityManager(1097):显示com.example.myapp/com.example.myapp.activity.TutorialActivity:+ 850ms(总计+ 1s503ms)

有人能告诉我活动经理如何得出结论,这是显示活动的时间吗?
在这段时间内会发生什么以及这段时间会考虑什么?
"正常时间"和"总时间"之间有什么区别?

我试图找到有关此事的材料,但没有成功..

提前谢谢!

android android-logcat activity-manager

7
推荐指数
1
解决办法
4015
查看次数

Android:如何确定IntentService是否正在运行?

我有一个上传活动,我称之为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

6
推荐指数
2
解决办法
9839
查看次数

如何获取当前正在运行的所有任务

我想获得在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)

android activity-manager

6
推荐指数
1
解决办法
6581
查看次数

无法在模拟器/设备上运行Android应用程序 - 活动不存在?

尝试在模拟器上运行我的应用程序时,我从activitymanager收到错误:

ActivityManager: Error type 3
Run Code Online (Sandbox Code Playgroud)

我的活动存在,列在清单中(事实上,它是MAIN启动器活动).

谁知道这个错误意味着什么?

android error-code android-activity activity-manager

5
推荐指数
2
解决办法
6683
查看次数

Android M:如何获取当前前台活动包名称(来自服务)

从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)

android activity-manager

5
推荐指数
1
解决办法
7847
查看次数

是否可以通过adb shell启动活动并接收其响应?

我知道,你可以从任何应用程序启动任何出口活动通过adb使用以下命令:

am start -n com.myapp.test/.TestActivity
Run Code Online (Sandbox Code Playgroud)

使用该"am start"命令还可以向活动发送额外的数据(我知道如何做到这一点,这不是我在这里问的问题!).

但是,我需要知道的是,是否还可以接收从已启动活动完成后发回的响应数据?

shell android android-activity activity-manager

5
推荐指数
1
解决办法
2109
查看次数