在facebook chatheads中,这是facebook messenger应用程序的一部分,我注意到以下行为:据我所知,聊天头本身和打开的聊天屏幕都是服务的一部分.不涉及任何活动.
我怎么能确定?在我打开的聊天屏幕上按回家后,它被最小化回聊天头,我可以立即重新打开聊天屏幕.如果聊天屏幕是活动,则startActivity(intent)
在按下主页按钮后重新打开活动将延迟活动的开始,如此处所指定:
在按下HOME按钮后从服务启动活动而没有延迟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聊天头).
我开发和应用程序是一个幻灯片放映的图片,当你点击它们时每个播放声音.这就像2-4岁的图画书.
问题是,因为android不会让你捕获主页按钮按下并基本上禁用它,当父母将电话给他们的孩子玩无人看管(勇敢的父母)时,孩子可能无意中退出应用程序然后拨打电话或否则调整手机.
还有另外两个应用程序目前有针对此问题的伪造修复程序.这些应用程序是Toddler Lock和ToddlePhone.我曾尝试联系这些应用程序的开发人员以获取一些指导,但他们并不愿意透露任何内容,如果没有问题,但是这里有人有任何建议吗?
看起来这两个应用程序都像主屏幕替换应用程序.当您在这些应用程序上启用"儿童防护模式"时,系统会提示用户选择和应用该操作,选项为"Launcher,LauncherPro等".再加上幼儿应用.然后你必须使幼儿应用程序成为默认设置,然后手机被"锁定",只能在你"解锁"手机时使用按键组合或触摸屏幕的四个角等"解锁".您正常的主屏幕应用程序默认恢复.下次启用"儿童防护模式"时,您甚至不必将幼儿应用程序设为默认应用程序.
我已经读过这两个应用程序与三星手机有问题,它们可能导致无限的崩溃和重启循环,需要恢复出厂设置.显然,这不是问题的理想解决方案,但它看起来是目前唯一可用的解决方案.
有没有人对如何实施"儿童防范模式"有任何想法?
我有一段意图的代码:
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秒钟.有没有办法加快这个过程?当我有一个仍在运行的应用程序时,它甚至需要很长时间.请帮忙...
我有一个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
.
我正在开发一个作为服务启动的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) 我有一个接收屏幕广播的广播接收器,当屏幕关闭时,它会启动一个活动.我已将此活动命名为LockScreenActivity.我已经添加 getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
的onCreate()
活性,使其出现在Android的锁屏,这正是我想要的顶部.这种方法效果很好,主要是.每当我按主页按钮将任何应用程序发送到后台时,就会出现问题.
当我按下主页按钮从任何应用程序返回主屏幕,然后立即按电源按钮关闭屏幕,并在一秒钟内按电源按钮重新打开,它显示Android锁定屏幕.我的活动在3-4秒后创建.这是一个巨大的延迟,是不可接受的.在其他情况下,这种延迟不会发生.如果我已经在主屏幕上呆了一段时间,或者某个其他应用程序已打开,我连续两次点击电源按钮,我会在看到Android锁屏之前看到我的LockScreenActivity.
我的应用程序还有一些其他正常活动(从App抽屉启动)和一个显示持久通知的服务.单击通知时将启动相同的LockScreenActivity.有趣的是,如果我按下主页按钮以最小化某个应用程序并立即单击我的应用程序的通知,它会毫不拖延地打开LockScreenActivity.
我经常搜索任何解决方案.这是我到目前为止尝试过的:
onReceive()
并将其发布onResume()
到LockScreenActivity中这是活动和服务的清单声明:
<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 ×7
service ×3
children ×1
components ×1
flags ×1
homescreen ×1
package ×1
performance ×1
replace ×1