相关疑难解决方法(0)

检查应用是否在后台

我实际上正在使用此代码来检查onPause中的应用是否会转到后台.

public static boolean isApplicationSentToBackground(final Context context) {
    ActivityManager am = (ActivityManager) context.getSystemService( Context.ACTIVITY_SERVICE );
    List<RunningTaskInfo> tasks = am.getRunningTasks( 1 );
    if (!tasks.isEmpty()) {
        ComponentName topActivity = tasks.get( 0 ).topActivity;
        String name = LockScreenActivity.class.getName();
        String topAPN = topActivity.getPackageName();
        String conAPN = context.getPackageName();

        if (topActivity.getClassName().equals( name ) || !topActivity.getPackageName().equals( context.getPackageName() )) {
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,Android 4.4一直运行良好.如果现在我检查topAPNconAPN它们相等(并且它们总是不相等时,应用程序被发送到背景上的Android <= 4.3).

你知道如何解决这个问题吗?有什么变化?

android android-4.4-kitkat

7
推荐指数
2
解决办法
3319
查看次数

想要在后台应用时隐藏Android吐司

如果我在我的应用程序活动不在前台时发出祝酒词,那么吐司仍将显示在屏幕上.当我的应用程序在后台运行时,如何防止我的toast出现.即,目前没有任何活动显示活动.

我想我必须以某种方式检测到我的活动不是当前正在展示的活动,而且当真实时没有发出任何祝酒词; 但我怎么能发现这种情况呢?

谢谢

android toast

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

你可以检测Android App何时进入后台?

可能重复:
如何检测Android应用程序何时进入后台并返回前台

Android应用可以有很多活动.我不想知道任何旧活动何时进入后台,我想知道应用程序中的任何活动何时进入后台,以及当应用程序中的任何活动进入前台时.

我是否必须为每项活动处理暂停/ onresume?有没有更简单的方法来做到这一点?

android

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

区分按"主页"按钮和打开另一个活动

我有三个活动: - SplashActivity - MainActivity - PlayerActivity

当然应用程序以SplashActivity开头,然后启动MainActivity并关闭.MainActivity在某个时刻启动了PlayerActivity并进入了Backstack.(MainActivity还活着但是在onStop上)然后我需要打开MainActivity并将PlayerActivity设置为后台(PlayerActivity是活着的但是在onStop上).然后我需要再次打开PlayerActivity并将MainActivity设置为background.

因此,当app将一个切换到另一个并返回时,PlayerActivity和MainActivity经常在没有onDestroy的情况下获得onPause()和onStop().

每次当用户按下"home"按钮时,我需要完成所有活动并启动SplashActivity应用程序,但主页按钮与活动之间的切换(onPause()和onStop())相同.所以我无法发现杀死活动的不同之处.

请帮忙.

编辑: 不幸的是,onUserLeaveHint没有帮助,它是一样的.如果User推送HOME,则调用:

onUserInteraction,onUserLeaveHint,onPause,onStop

此活动返回上一个活动(主),没有任何用户操作.

public class PlayerActivity扩展Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_next);

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            startActivity(new Intent(PlayerActivity.this, MyActivity.class));
        }
    }, 5000);
}
Run Code Online (Sandbox Code Playgroud)

}

但仍然有相同的:

onUserInteraction,onUserLeaveHint,onPause,onStop

android activity-lifecycle android-lifecycle android-activity

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

如何检测应用程序何时最小化或退出

嘿,我有一个应用程序,我现在想要当应用程序进入 onPause 或 onDestroy 时,因为我想在发生这种情况时调用某个函数。我尝试覆盖活动中的 onPause 并在所有项目中扩展该活动,但活动之间的每次迁移都会调用 onPause (这是合乎逻辑的),但这不是我想要的。我想知道用户何时退出应用程序或暂停应用程序(按主页按钮)问候,

android cycle

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

Android:听电源按键

我正在尝试按下电源按钮时听.最后,我希望在按两次电源按钮时运行一些代码,以检查屏幕是锁定还是解锁.我目前有这个:

  @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);//prevent phone from being locked
}

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_POWER:
        {
            Toast.makeText(getBaseContext(), "Power button pressed", Toast.LENGTH_LONG).show();

            return true;
        }
        case KeyEvent.KEYCODE_MENU:
            Toast.makeText(getBaseContext(), "Menu Button Pressed", Toast.LENGTH_LONG).show();

            return true;
    }
    return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)

该代码可以很好地为菜单keyevent干杯,但不会为电源键事件做任何事情.有任何想法吗?

android keyevent

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

确定前台的应用程序是否是不受欢迎的?

检测应用程序是否在前台有很多原因.例如 - 作为GCM/C2DM推送通知的触发器 - 当应用程序是前台和后台时,许多应用程序将有充分的理由实现不同的行为.其他原因可能是 - 淘汰消耗宝贵资源的服务,例如在后台任务中查询服务器.

需要明确的是:后台app的定义(我认为)是:
应用程序,它没有调用任何活动onStart()方法,也没有调用onStop()方法.那是因为活动只在那个时候在生命周期中对用户可见.

从另一方面 -

  • 似乎Google不希望应用程序对主页按钮作出反应(它不是API的一部分)

  • onBackPressed()对"root/main"活动作出反应作为指示离开Activity肯定不是一个好主意(因为很多用户使用主页按钮,而不是后退按钮)

  • API中没有方法可以确定app是否为前景(根据我的定义..)

如果我没有错过API中的某些内容,而且确实如此 - 为什么没有原因可以轻松确定应用程序是否为前景???? !!!!

我知道我可以做的是确定应用程序是否为前景在此主题中描述 - 如何检测Android应用程序何时进入后台并返回到前台

但正如@Emil所说 - 它需要特殊许可,或者需要一些棘手的逻辑,这些逻辑很快就会成为维护的问题,并且它闻起来像是糟糕的方法(虽然这就是我现在正在做的事情,因为我没有更好的想法. ..)

我的问题基本上是:

  • 有充分理由没有这样的API方法吗?

  • 是否考虑应用程序是否为前景是一种不好的方法?

  • 有没有其他方法可以知道应用程序是否是前景?

android application-lifecycle activity-lifecycle

3
推荐指数
1
解决办法
1827
查看次数

检查应用程序是在前台还是后台运行(使用同步适配器)

我知道这是一个重复的问题,但我看到了整个地方,找不到适合我的解决方案......

我有一个从TMDB API获取电影数据的应用程序,它使用同步适配器逐页获取,基本上它运行很好,除非在应用程序打开且用户不在第一页时运行同步适配器的定期同步,所以我的选择是强制更新电影列表并将用户发送到列表的顶部,这是非常糟糕的体验,因此不被视为一个选项,或者我可以检查应用程序是否正在运行,无论是在前台还是在应用程序中堆栈,它对用户不可见但仍在运行,所以通过搜索得到的最好的是这段代码:

   public static boolean isAppRunning(final Context context, final String packageName) {

    final ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    final List<ActivityManager.RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();

    if (procInfos != null) {
        for (final ActivityManager.RunningAppProcessInfo processInfo : procInfos) {
            if (processInfo.processName.equals(packageName))
                return true;
        }
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

但无论出于什么原因,它都无法正常工作并且即使我通过刷卡杀死它也看到应用程序正在运行,起初我认为这是因为我有一个同步适配器可以被认为是运行的应用程序所以我使用了另一个进程它在清单中使用了

android:process=":service"
Run Code Online (Sandbox Code Playgroud)

但它不起作用

还考虑在活动的onStart和onStop中使用变量,但不保证在关闭或杀死应用程序时会调用onStop,因此试图避免使用此方法

这是我的manifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="inc.mourad.ahmed.watchme">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />

<permission
    android:name="inc.ahmed.mourad.ACCESS_WATCHME_DATABASE"
    android:label="access my movies content provider"
    android:protectionLevel="dangerous" />
<permission
    android:name="inc.ahmed.mourad.ACCESS_WATCHME_SYNC_SERVICE"
    android:label="access …
Run Code Online (Sandbox Code Playgroud)

android android-syncadapter

3
推荐指数
2
解决办法
4155
查看次数