编写:徐建祥(netpirate@gmail.com)
日期:2010/12/13
网址:http://www.anymobile.org
打开程序的入口有很多个:
shell 命令行运行;
Launcher待机界面执行;
状态通知栏运行;
桌面快捷方式运行;
软件中调用运行;
安装软件后执行“OPEN”运行!
前面几项,调用程序的代码如下(参考:com.android.Launcher/.Launcher.java):
- Intent intent = new Intent(this, TestActivity.class);
- intent.setAction(Intent.ACTION_MAIN);
- intent.addCategory(Intent.CATEGORY_LAUNCHER);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
- this.startActivity(intent);
而安装软件后,点击“Open”调用的代码如下(参考:com.android.packageinstaller/.InstallAppDone.java):
- Intent intent = new Intent(this, TestActivity.class);
- this.startActivity(intent);
如果用户安装软件后立刻执行“Open”,运行程序后,按HOME键返回到后台,然后再通过别的几种方法运行程序,则会再起一个MAIN程序。这是因为Intent的处理机制是,先比较Activity,再比较Action、Flag、bnds。。。,前后两张方式的Action不一样,一个有LAUNCHER ACTION,一个没有,所以会认为是启动两个不同的INTENT。
目前只想到一个简单的处理方式:
程序入口MAIN程序:SplashActivity.java
程序原入口程序:LoginActivity.java
启动程序后,在状态通知栏上添加快捷通知,代码如下:
- package org.anymobile.test;
- import android.app.Activity;
- import android.app.Notification;
- import android.app.NotificationManager;
- import android.app.PendingIntent;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.os.Bundle;
- public class SplashActivity extends Activity
- {
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
-
- this.showNotification(this.getBaseContext(), -1, "Test is Running!", "Test Start Up!");
-
- Intent intent = this.getIntent();
- if (intent.hasCategory(Intent.CATEGORY_LAUNCHER))
- {
- intent = new Intent(this, TestActivity.class);
- this.startActivity(intent);
- }
- else
- {
- intent = new Intent();
- ComponentName componentName = new ComponentName(this, SplashActivity.class);
- intent.setComponent(componentName);
-
-
- intent.setAction(Intent.ACTION_MAIN);
- intent.addCategory(Intent.CATEGORY_LAUNCHER);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
-
- this.startActivity(intent);
- }
-
- this.finish();
- }
- public void showNotification(Context context,int iResIcon,String sNotifybar,String sNofitymsg)
- {
-
- NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
-
- CharSequence from = "Test";
- CharSequence message = sNofitymsg;
-
- Intent intent = new Intent();
- ComponentName componentName = new ComponentName(context, TestActivity.class);
- intent.setComponent(componentName);
-
- intent.setAction(Intent.ACTION_MAIN);
- intent.addCategory(Intent.CATEGORY_LAUNCHER);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
-
- PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0);
- Notification notification =
- new Notification(iResIcon,sNotifybar, System.currentTimeMillis());
- notification.flags = notification.flags | Notification.FLAG_ONGOING_EVENT;
- notification.defaults =
- Notification.DEFAULT_LIGHTS;
- notification.setLatestEventInfo(context, from, message, contentIntent);
- line-height: 18px; color: black; background-co
分享到:
相关推荐
在某些情况下,这可以避免重复启动Activity,但请注意,Sticky Broadcast在Android 8.0(API级别26)及以上版本已被废弃。 5. **合理使用Intent Filter**:限制BroadcastReceiver接收的Intent Filter范围,减少不必...
这意味着每次启动Activity,栈中都会有一个新的实例,可能导致内存消耗增加。 2. **单任务模式(SingleTask)** 单任务模式下,系统会确保该Activity在其自己的任务栈中运行。首次启动时,系统会创建一个新的任务...
这种模式常用于避免重复创建Activity,比如通知或者广播接收器启动Activity时。 Eclipse代码验证这部分知识时,可以创建四个不同的Activity,分别为每种启动模式设置一个,并编写相应的启动逻辑。例如,可以通过...
然而,当前的 Activity 跳转分析方法对启动方式不敏感,无法正确模拟使用特殊启动方式的 Android 应用返回栈状态变化,从而产生非法路径。 本文提出了一个形式化的 Activity 启动图(Activity Launch Graph,ALG)...
启动Activity时,我们通常会创建一个Intent对象,并指定目标Activity。例如: ```java Intent intent = new Intent(this, TargetActivity.class); ``` Intent标志对于Activity的启动方式有着重要影响。以下是一些...
总的来说,为Activity创建启动和退出动画是提高应用吸引力和用户体验的有效方式。理解Android动画系统的工作原理,结合XML动画资源和Java代码,我们可以实现各种各样的动画效果,包括从右侧进入和退出的动画。记住,...
尽管Activity可以直接处理Intent,但也可以注册BroadcastReceiver监听特定Action的Intent,然后根据Intent的内容决定是否启动Activity或执行其他操作。 通过这个源码,开发者可以深入理解如何在多个Activity间共享...
在Android开发中,有时我们需要一个APK支持多个入口点,每个入口点对应不同的功能或界面,比如同一个应用可以通过不同的图标进入不同的Tab页。这个需求在一些常驻应用中尤为常见,比如电话本应用,用户可能希望通过...
"动画启动Activity"是一个关于如何为应用程序的Activity添加各种进入动画效果的专题,非常适合初级到中级水平的开发者进行学习和实践。这个专题主要涉及到Android中的视图动画(View Animation)和属性动画...
在启动应用的第一个Activity时,可以检查Intent是否有特定的Extra数据,如果没有,视为第一次启动。 以上就是判断Android应用是否第一次启动的常见方法,通常首选SharedPreferences,因为它简单且效率高。在实际...
Fragment和FragmentTransaction提供了更好的解决方案,它们可以在单个Activity中管理多个视图,并且支持更复杂的应用场景。如果需要处理遗留代码或对ActivityGroup有深入了解的需求,以上内容将为你提供基础的指导。
这对于需要启动一个独立于当前应用的 Activity 场景非常有用。 #### 三、启动模式示例及实践 假设我们有一个应用 AppA,包含 AfirstActivity 和 AsecondActivity。在默认情况下,这两个 Activity 都将以 `standard...
每次启动Activity时,不论栈中是否存在该Activity的实例,系统都会创建一个新的实例,并将其压入任务栈顶。这意味着,同一个Activity可以在任务栈中存在多个实例。 2. **单实例模式(SingleInstance)**:在这种...
在Android应用开发中,Activity是用户界面的基本单元,它的启动模式和窗口导航是理解应用程序行为和用户体验设计的关键。本文将深入探讨Activity的四种启动模式——Standard、SingleTop、SingleTask和SingleInstance...
标题中的“避免HOME键重复启动launcher”涉及到的是Android操作系统中关于Home键的处理以及应用程序启动管理的问题。在Android系统中,Home键是用户用来返回主屏幕的重要交互元素,但有时在开发特定应用如锁屏应用时...
如果需要在整个应用中保持一致性,可以考虑将动画设置封装到一个公共的基类Activity中,然后让其他所有Activity继承这个基类,这样就不需要在每个Activity中重复设置动画。 通过以上步骤,我们就实现了点击按钮时...
1. 创建启动页布局:一个简单的Activity布局,通常包含应用Logo和背景色。 2. 主Activity延迟启动:在AndroidManifest.xml中设置启动页Activity为主Activity,并在启动页Activity中延迟启动真正的主Activity。 3. ...
每次启动Activity时,系统都会创建一个新的实例,并将其压入任务栈的顶部。如果任务栈中已有该Activity的实例,那么会创建一个新的实例并添加到栈中。这种模式可能导致多个相同的Activity实例存在于不同的任务栈或者...
在这种模式下,每次启动Activity时都会创建一个新的实例。无论启动请求来自哪里,系统都会为每个请求创建一个新的Activity实例。如果栈中已经存在该Activity的实例,也会创建新的实例并压入栈顶。 2. **单例模式...