相关疑难解决方法(0)

Android:如何获取当前前台活动(来自服务)?

是否有一种原生的android方法来从服务获取对当前运行的Activity的引用?

我有一个在后台运行的服务,我想在事件发生时(在服务中)更新我当前的Activity.有没有一种简单的方法(就像我上面建议的那样)?

service android android-activity

172
推荐指数
7
解决办法
26万
查看次数

如何使用UsageStatsManager?

背景

谷歌已弃用getRecentTasks"ActivityManager"类的功能" ".现在它所做的只是获取当前应用程序已打开的应用程序列表.

我甚至在StackOverflow上写了一篇关于它的帖子,但我发现这是不可能的.

问题

我发了一篇关于它的帖子(在这里,另一个,类似的由其他人创建,在这里),并要求重新考虑它,谷歌决定创建一个新类,似乎提供类似的功能(更像是统计,但也可能有用),但我无法找到如何使用它.

该类称为" UsageStatsManager",我的猜测是函数" queryUsageStats"完成工作.

此外,它似乎有一个新的权限(" android.permission.PACKAGE_USAGE_STATS"),这是一个系统权限,但它写道:

声明权限意味着使用API​​的意图,设备用户可以通过Settings应用程序授予权限.

这是关于这个新功能另一个链接.

我发现了什么

我查看了Android的代码,并注意到"Context"有USAGE_STATS_SERVICE,在JavaDocs中说下一件事:

/**
 * Use with {@link #getSystemService} to retrieve a {@link
 * android.app.UsageStatsManager} for interacting with the status bar.
 *
 * @see #getSystemService
 * @see android.app.UsageStatsManager
 * @hide
 */
public static final String USAGE_STATS_SERVICE = "usagestats";
Run Code Online (Sandbox Code Playgroud)

奇怪的是,不仅它说" status bar",而且packageName也不匹配(应该是" android.app.usage.UsageStatsManager").

我还添加了正确的权限:

<uses-permission
    android:name="android.permission.PACKAGE_USAGE_STATS"
    tools:ignore="ProtectedPermissions" />
Run Code Online (Sandbox Code Playgroud)

这是我使用的代码:

  final UsageStatsManager …
Run Code Online (Sandbox Code Playgroud)

android usage-statistics activity-manager android-recents usagestatsmanager

52
推荐指数
5
解决办法
5万
查看次数

GET_TASKS权限已弃用

我有一个使用此权限的安全应用程序(App Locker):

android.permission.GET_TASKS
Run Code Online (Sandbox Code Playgroud)

在android Lollipop中,这个权限已被弃用,我希望我的应用程序在+21 API中运行.
谁能指导我怎么样?

Thnx :)

permissions android deprecated

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

PublisherAdView.loadAd()抛出SecurityException - getTasks()需要android.permission.GET_TASKS

从昨天,3月11日开始,我开始看到SecurityException崩溃的高峰.(请参阅下面的堆栈跟踪.)其他人是否也看到此异常?搜索没有发现任何东西.

我的问题是升级到较新版本的Play服务是否能解决问题.

这是堆栈:

java.lang.SecurityException: Permission Denial: getTasks() from pid=30319, uid=10157 requires android.permission.GET_TASKS
   at android.os.Parcel.readException(Parcel.java:1474)
   at android.os.Parcel.readException(Parcel.java:1428)
   at android.app.ActivityManagerProxy.getTasks(ActivityManagerNative.java:2726)
   at android.app.ActivityManager.getRunningTasks(ActivityManager.java:791)
   at android.app.ActivityManager.getRunningTasks(ActivityManager.java:827)
   at com.google.android.gms.ads.internal.util.h.a(SourceFile:703)
   at com.google.android.gms.ads.internal.a.a(SourceFile:1634)
   at com.google.android.gms.ads.internal.a.a(SourceFile:530)
   at com.google.android.gms.ads.internal.client.t.onTransact(SourceFile:81)
   at android.os.Binder.transact(Binder.java:361)
   at com.google.android.gms.internal.bd$a$a.a()
   at com.google.android.gms.internal.bh.a()
   at com.google.android.gms.ads.doubleclick.PublisherAdView.loadAd()
Run Code Online (Sandbox Code Playgroud)

我打算在调用loadAd()时发布带有try/catch的补丁.我还计划在不久的将来从PlayServices 6.1.71升级到6.5.87,但我不愿意在补丁发布中引入这种风险,除非它是一个已知的修复.

我在此向Google报告了该错误:https://groups.google.com/forum/#! category_topic/google-admob-ads-sdk/android/ IuSQriNWKps

编辑/澄清:我知道通过请求GET_TASKS权限可以避免此SecurityException,但我不需要该应用程序的权限,我也不知道为什么AdMob广告应该.

我也知道GET_TASKS自API 21起已被弃用,但此应用程序的目标是API 19.

android securityexception admob google-play-services

16
推荐指数
2
解决办法
9540
查看次数

如何在Android 5.0(L)中运行应用程序活动名称?

我使用以下代码来获取android中当前运行的活动名称.

ActivityManager am = (ActivityManager) aContext
                .getSystemService(Context.ACTIVITY_SERVICE);            
List<ActivityManager.RunningTaskInfo> alltasks = am
                .getRunningTasks(1);

ComponentName componentInfo = alltasks.get(0).topActivity;
componentInfo.getClassName();

System.out.println("Current:"+componentInfo.getClassName());
Run Code Online (Sandbox Code Playgroud)

这在android下面的所有版本中运行良好5.0.但在Android 5.0中,它总是返回启动器活动.

请任何一个帮助,因为我想在所有Android版本中运行应用程序.

android android-5.0-lollipop

13
推荐指数
1
解决办法
2万
查看次数

如何以编程方式为应用程序设置锁定或引脚

所以现在我正在为我的孩子们开发一个Android应用程序.我想在特定时间内在选定的应用程序上设置一个或多个密码,以防止他们打开应用程序.例如,假设我的女儿在我工作的时候想在我的手机上播放愤怒的小鸟一段时间.我将选择我的重要应用程序,如消息,gmail等,并在她玩愤怒的小鸟时将针或密码放在上面30分钟.30分钟后,我从女儿那里拿到手机,因为时间限制到期,我可以不用别针打开应用程序.

我已经对此做了大量的研究,但是我无法找到针对我的具体案例的实现.

android"app lock"应用程序如何工作?

我知道app锁具有类似我想做的结构.我只想给锁定一个时间限制.

https://play.google.com/store/apps/details?id=com.domobile.applock&hl=en

我远离使用ActivityManager等杀死活动/应用程序.我真的只想在特定时间内在所选应用程序上使用干净的锁定屏幕.

我有一个CountdownTimer来计算我设定的时间计时器.如果我拥有所有的包名,我将如何修改此代码以在选定的时间内阻止某些应用程序?

    start_timer.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View view) {

            new AlertDialog.Builder( MainActivity.this )
                    .setMessage( "Are you sure you want to block the selected apps for the set amount of time?" )
                    .setPositiveButton( "Yeah man!", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            Log.d( "AlertDialog", "Positive" );

                            hourint = Integer.valueOf(number_text.getText().toString());

                            minuteint = Integer.valueOf(minute_text.getText().toString());

                            secondint = Integer.valueOf(second_text.getText().toString());

                            Log.i("YourActivity", "Hours: " + hourint);

                            Log.i("YourActivity", "Minutes: " + minuteint);

                            Log.i("YourActivity", "Seconds: " + secondint); …
Run Code Online (Sandbox Code Playgroud)

java android countdown android-package-managers device-policy-manager

11
推荐指数
1
解决办法
2万
查看次数

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
查看次数