为了账号安全,请及时绑定邮箱和手机立即绑定

如何在棒棒糖中获取“ getTopActivity”名称或获取当前正在运行的应用程序包名称?

/ 猿问

如何在棒棒糖中获取“ getTopActivity”名称或获取当前正在运行的应用程序包名称?

青春有我 2019-12-27 09:13:16

我正在创建一个应用锁定应用程序。如何在棒棒糖中获取当前正在运行的任务?getRunningTaskinfo棒棒糖API中已弃用该方法,那么如何解决此问题?



查看完整描述

3 回答

?
拉风的咖菲猫

尝试这个:


ActivityManager mActivityManager =(ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);


if(Build.VERSION.SDK_INT > 20){

String mPackageName = mActivityManager.getRunningAppProcesses().get(0).processName;

}

else{

  String mpackageName = mActivityManager.getRunningTasks(1).get(0).topActivity.getPackageName();

}

我们可以使用UsageStats:


public static String getTopAppName(Context context) {

    ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

    String strName = "";

    try {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

            strName = getLollipopFGAppPackageName(context);

        } else {

            strName = mActivityManager.getRunningTasks(1).get(0).topActivity.getClassName();

        }

    } catch (Exception e) {

        e.printStackTrace();

    }

    return strName;

}



private static String getLollipopFGAppPackageName(Context ctx) {


    try {

        UsageStatsManager usageStatsManager = (UsageStatsManager) ctx.getSystemService("usagestats");

        long milliSecs = 60 * 1000;

        Date date = new Date();

        List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, date.getTime() - milliSecs, date.getTime());

        if (queryUsageStats.size() > 0) {

            Log.i("LPU", "queryUsageStats size: " + queryUsageStats.size());

        }

        long recentTime = 0;

        String recentPkg = "";

        for (int i = 0; i < queryUsageStats.size(); i++) {

            UsageStats stats = queryUsageStats.get(i);

            if (i == 0 && !"org.pervacio.pvadiag".equals(stats.getPackageName())) {

                Log.i("LPU", "PackageName: " + stats.getPackageName() + " " + stats.getLastTimeStamp());

            }

            if (stats.getLastTimeStamp() > recentTime) {

                recentTime = stats.getLastTimeStamp();

                recentPkg = stats.getPackageName();

            }

        }

        return recentPkg;

    } catch (Exception e) {

        e.printStackTrace();

    }

    return "";

}

//启用USAGE_STATS


    // Declare USAGE_STATS permisssion in manifest


    <uses-permission

    android:name="android.permission.PACKAGE_USAGE_STATS"

    tools:ignore="ProtectedPermissions" />



    Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);

    startActivity(intent);


查看完整回答
反对 回复 2019-12-27
?
catspeake

在API 21或更高版本中获取“运行应用”的最佳解决方案是尝试以下方法。这项工作对我来说


private String retriveNewApp() {

    if (VERSION.SDK_INT >= 21) {

        String currentApp = null;

        UsageStatsManager usm = (UsageStatsManager) this.getSystemService(Context.USAGE_STATS_SERVICE);

        long time = System.currentTimeMillis();

        List<UsageStats> applist = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time);

        if (applist != null && applist.size() > 0) {

            SortedMap<Long, UsageStats> mySortedMap = new TreeMap<>();

            for (UsageStats usageStats : applist) {

                mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);

            }

            if (mySortedMap != null && !mySortedMap.isEmpty()) {

                currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName();

            }

        }

        Log.e(TAG, "Current App in foreground is: " + currentApp);


        return currentApp;


    }

    else {


        ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

        String mm=(manager.getRunningTasks(1).get(0)).topActivity.getPackageName();

        Log.e(TAG, "Current App in foreground is: " + mm);

        return mm;

    }

}


查看完整回答
反对 回复 2019-12-27
?
白衣染霜花

你确定吗?如我所见,根据最新的Android文档,LOLLIPOP更新不允许您了解有关您自己以外的其他应用程序的任何信息!


http://developer.android.com/reference/android/app/ActivityManager.html 您可以看到所有这些方法都已弃用!


查看完整回答
反对 回复 2019-12-27

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信