相关疑难解决方法(0)

在android服务中检测'home button pressed'事件,显示一个UI(类似于facebook chatheads)

在facebook chatheads中,这是facebook messenger应用程序的一部分,我注意到以下行为:据我所知,聊天头本身和打开的聊天屏幕都是服务的一部分.不涉及任何活动.

我怎么能确定?在我打开的聊天屏幕上按回家后,它被最小化回聊天头,我可以立即重新打开聊天屏幕.如果聊天屏幕是活动,则startActivity(intent)在按下主页按钮后重新打开活动将延迟活动的开始,如此处所指定: 在按下HOME按钮后从服务启动活动而没有延迟5秒

在这里:按下主页按钮显示活动5秒延迟的原因?

在我的服务onCreate方法中,我使用以下代码从服务中显示UI:

public class ServiceTest extends Service {
...
    @Override 
    public void onCreate() {
        super.onCreate();

        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

        windowManager.addView(someView, params);
    }
....
}
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何直接从显示用户界面的服务接收"按下主页按钮"事件?当用户按下主页按钮时,我想最小化我的视图(类似于Facebook聊天头).

service user-interface android

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

在Android幼儿园应用中禁用主页按钮?

我开发和应用程序是一个幻灯片放映的图片,当你点击它们时每个播放声音.这就像2-4岁的图画书.

问题是,因为android不会让你捕获主页按钮按下并基本上禁用它,当父母将电话给他们的孩子玩无人看管(勇敢的父母)时,孩子可能无意中退出应用程序然后拨打电话或否则调整手机.

还有另外两个应用程序目前有针对此问题的伪造修复程序.这些应用程序是Toddler Lock和ToddlePhone.我曾尝试联系这些应用程序的开发人员以获取一些指导,但他们并不愿意透露任何内容,如果没有问题,但是这里有人有任何建议吗?

看起来这两个应用程序都像主屏幕替换应用程序.当您在这些应用程序上启用"儿童防护模式"时,系统会提示用户选择和应用该操作,选项为"Launcher,LauncherPro等".再加上幼儿应用.然后你必须使幼儿应用程序成为默认设置,然后手机被"锁定",只能在你"解锁"手机时使用按键组合或触摸屏幕的四个角等"解锁".您正常的主屏幕应用程序默认恢复.下次启用"儿童防护模式"时,您甚至不必将幼儿应用程序设为默认应用程序.

我已经读过这两个应用程序与三星手机有问题,它们可能导致无限的崩溃和重启循环,需要恢复出厂设置.显然,这不是问题的理想解决方案,但它看起来是目前唯一可用的解决方案.

有没有人对如何实施"儿童防范模式"有任何想法?

android children replace android-homebutton

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

检测具有窗口的服务内的导航按钮的触摸事件

我正在构建一个应用程序,在某些事件上启动服务.该服务在每个应用程序的顶部都有一个叠加视图(如Facebook聊天头).我想停止服务并在点击导航软键按钮(后面,主页和最近的应用程序)时删除叠加视图.

我通过扩展RelativeLayout成功地制作了一个覆盖视图.我正在关注视图以进行叠加视图.

Facebook正在为扩展和关闭聊天头做同样的事情.提前致谢.:)

编辑

我的问题与此处所述相同.

service android homescreen live-wallpaper

9
推荐指数
1
解决办法
902
查看次数

Intent启动新活动非常缓慢:(

我有一段意图的代码:

Intent i = new Intent();
        i.setAction(Intent.ACTION_MAIN);
        i.addCategory(Intent.CATEGORY_LAUNCHER);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        i.setComponent(new ComponentName(packToLaunch, nameToLaunch));
        startActivity(i);
Run Code Online (Sandbox Code Playgroud)

这基本上是基于我传递给它的包名称启动一个新活动.有时,启动此新活动最多需要5秒钟.有没有办法加快这个过程?当我有一个仍在运行的应用程序时,它甚至需要很长时间.请帮忙...

flags android components package android-intent

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

从服务开始活动需要太长时间

我有一个Service当一个函数给我true时它将启动一个新的Activity但它需要5秒...

我已经读过这个issue,我在StackOverflow这个例子中找到了"避免"这个bug.

Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
try {
   pendingIntent.send();
} catch (PendingIntent.CanceledException e) {
   e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

但遗憾的是它没有Activity更快启动,我不需要处于初级状态(如果可能的话更好),但是我不想等待+5秒来启动新功能Activity,你是否知道要避免这种情况?

我正在使用,PendingIntent因为我发现那个人说它应该解决这个问题: 在没有5秒延迟的情况下按下HOME按钮后从服务启动一个活动

注意

如果我按下back button它会自动启动它,0延迟,但我正在按下它home button.

service android android-intent android-activity

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

在startActivity上启动速度

我正在开发一个作为服务启动的Android应用程序

在特定条件下的另一个应用程序

有很多机会使用函数'startActivity'.

我注意到有时使用startActivity启动另一个应用程序需要很长时间.

请看下两个案例.

案例1:菜单 - >返回键 - >主页 - > startActivity

案例2:菜单 - >主页键 - >主页 - > startActivity

在第一种情况下,启动新应用程序没有延迟.

但在第二种情况下,启动一个新的应用程序需要3~5秒.

我尝试了很多次,但结果是一样的.

请帮我解决这个问题.

为什么只在第二种情况下需要很长时间?

我的代码:

    public class LauncherService extends Service implements OnTouchListener {
long timeStamp;

 public void onCreate() {
     super.onCreate();
     Button mButton;
     mButton = new Button(this);
     mButton.setId(1);
     mButton.setOnTouchListener(this);

     mButton.setText("");

     WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.FILL_PARENT,
                WindowManager.LayoutParams.FILL_PARENT,
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH |
                WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
                PixelFormat.TRANSPARENT);

     mButton.setBackgroundColor(Color.argb(0x00, 0x00, 0x00, 0x00));

     WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
     wm.addView(mButton, params);
 }

 public void launchActivity(){
     String pkgname …
Run Code Online (Sandbox Code Playgroud)

performance android android-activity

6
推荐指数
0
解决办法
1745
查看次数

从服务启动活动时延迟

我有一个接收屏幕广播的广播接收器,当屏幕关闭时,它会启动一个活动.我已将此活动命名为LockScreenActivity.我已经添加 getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);onCreate()活性,使其出现在Android的锁屏,这正是我想要的顶部.这种方法效果很好,主要是.每当我按主页按钮将任何应用程序发送到后台时,就会出现问题.

当我按下主页按钮从任何应用程序返回主屏幕,然后立即按电源按钮关闭屏幕,并在一秒钟内按电源按钮重新打开,它显示Android锁定屏幕.我的活动在3-4秒后创建.这是一个巨大的延迟,是不可接受的.在其他情况下,这种延迟不会发生.如果我已经在主屏幕上呆了一段时间,或者某个其他应用程序已打开,我连续两次点击电源按钮,我会在看到Android锁屏之前看到我的LockScreenActivity.

我的应用程序还有一些其他正常活动(从App抽屉启动)和一个显示持久通知的服务.单击通知时将启动相同的LockScreenActivity.有趣的是,如果我按下主页按钮以最小化某个应用程序并立即单击我的应用程序的通知,它会毫不拖延地打开LockScreenActivity.

我经常搜索任何解决方案.这是我到目前为止尝试过的:

  1. 通过在注册广播接收器时传递处理程序使广播接收器在单独的线程中运行
  2. 在广播接收器中获取了一个唤醒锁,onReceive()并将其发布onResume()到LockScreenActivity中
  3. 通过在清单中指定不同的taskAffinity,为LockScreenActivity创建单独的任务堆栈.我还玩过很多与活动堆栈相关的选项组合,但到目前为止还没有任何帮助.
  4. 不是直接启动活动,而是向服务发送意图,然后启动活动.遗憾的是,没有任何工作.

这是活动和服务的清单声明:

<activity
        android:name=".LockScreenActivity"
        android:label="@string/app_name"
        android:excludeFromRecents="true"
        android:taskAffinity="@string/task_lockscreen">
</activity>
<service
        android:name=".services.BaseService"
        android:enabled="true" >
</service>
Run Code Online (Sandbox Code Playgroud)

广播接收器:

public class ScreenReceiver extends BroadcastReceiver {
private static final String LOG_TAG = ScreenReceiver.class.getSimpleName();
private static final String HANDLER_THREAD_NAME = "screen_receiver_thread";
public static final String WAKELOCK_TAG = "lockscreen_overlay_create_wakelock";

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        WakeLockHelper.acquireWakeLock(WAKELOCK_TAG, context);
        Log.d(LOG_TAG, "Screen off");
        context.startService(BaseService.getServiceIntent(context, null, BaseService.ACTION_START_LOCKSCREEN_ACTIVITY));
    } else { …
Run Code Online (Sandbox Code Playgroud)

android android-intent

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