相关疑难解决方法(0)

android从服务开始活动

安卓:

public class LocationService extends Service {

@Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        startActivity(new Intent(this, activity.class));
    }
}
Run Code Online (Sandbox Code Playgroud)

我推出了这项服务 Activity

Activity如果条件满足启动

startService(new Intent(WozzonActivity.this, LocationService.class));
Run Code Online (Sandbox Code Playgroud)

从我LocationService上面提到的无法启动Activity,我怎样才能获得当前Activity在服务类中运行的上下文?

android android-service android-activity

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

按下HOME按钮后,在没有5秒延迟的情况下从服务启动活动

我遇到了此Android问题中描述的问题:http: //code.google.com/p/android/issues/detail?id = 4536

简单地说,按下HOME按钮后,android会阻止服务和广播接收器调用startActivity 5秒钟.

我也注意到了(理论上),具有以下许可:

"android.permission.STOP_APP_SWITCHES"
Run Code Online (Sandbox Code Playgroud)

允许您调用resumeAppSwitches(在ActivityManagerService中定义).查看最新版本的ActivityManagerService,将删除此代码.

问题:如何在没有5秒延迟的情况下使用startActivity启动活动?

android

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

从服务启动活动时延迟

我有一个接收屏幕广播的广播接收器,当屏幕关闭时,它会启动一个活动.我已将此活动命名为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
查看次数