22
33import android .app .Activity ;
44import android .content .ComponentName ;
5+ import android .content .Context ;
56import android .content .Intent ;
67import android .content .pm .PackageManager ;
78import android .content .pm .ResolveInfo ;
@@ -44,24 +45,132 @@ public static boolean isActivityExists(String packageName, String className) {
4445 }
4546
4647 /**
47- * 打开Activity
48+ * 启动Activity
4849 *
49- * @param packageName 包名
50- * @param className 全类名
50+ * @param activity activity
51+ * @param cls activity类
5152 */
52- public static void launchActivity ( String packageName , String className ) {
53- launchActivity ( packageName , className , null );
53+ public static void startActivity ( Activity activity , Class <?> cls ) {
54+ startActivity ( activity , null , activity . getPackageName (), cls . getName () , null );
5455 }
5556
5657 /**
57- * 打开Activity
58+ * 启动Activity
5859 *
59- * @param packageName 包名
60- * @param className 全类名
61- * @param bundle bundle
60+ * @param extras extras
61+ * @param activity activity
62+ * @param cls activity类
63+ */
64+ public static void startActivity (Bundle extras , Activity activity , Class <?> cls ) {
65+ startActivity (activity , extras , activity .getPackageName (), cls .getName (), null );
66+ }
67+
68+ /**
69+ * 启动Activity
70+ *
71+ * @param activity activity
72+ * @param cls activity类
73+ * @param enterAnim 入场动画
74+ * @param exitAnim 出场动画
75+ */
76+ public static void startActivity (Activity activity , Class <?> cls , int enterAnim , int exitAnim ) {
77+ startActivity (activity , null , activity .getPackageName (), cls .getName (), null );
78+ activity .overridePendingTransition (enterAnim , exitAnim );
79+ }
80+
81+ /**
82+ * 启动Activity
83+ *
84+ * @param extras extras
85+ * @param activity activity
86+ * @param cls activity类
87+ * @param enterAnim 入场动画
88+ * @param exitAnim 出场动画
89+ */
90+ public static void startActivity (Bundle extras , Activity activity , Class <?> cls , int enterAnim , int exitAnim ) {
91+ startActivity (activity , extras , activity .getPackageName (), cls .getName (), null );
92+ activity .overridePendingTransition (enterAnim , exitAnim );
93+ }
94+
95+ /**
96+ * 启动Activity
97+ *
98+ * @param activity activity
99+ * @param cls activity类
100+ * @param options 跳转动画
101+ */
102+ public static void startActivity (Activity activity , Class <?> cls , Bundle options ) {
103+ startActivity (activity , null , activity .getPackageName (), cls .getName (), options );
104+ }
105+
106+ /**
107+ * 启动Activity
108+ *
109+ * @param extras extras
110+ * @param activity activity
111+ * @param cls activity类
112+ * @param options 跳转动画
113+ */
114+ public static void startActivity (Bundle extras , Activity activity , Class <?> cls , Bundle options ) {
115+ startActivity (activity , extras , activity .getPackageName (), cls .getName (), options );
116+ }
117+
118+ /**
119+ * 启动Activity
120+ *
121+ * @param pkg 包名
122+ * @param cls 全类名
123+ */
124+ public static void startActivity (String pkg , String cls ) {
125+ startActivity (Utils .getContext (), null , pkg , cls , null );
126+ }
127+
128+ /**
129+ * 启动Activity
130+ *
131+ * @param extras extras
132+ * @param pkg 包名
133+ * @param cls 全类名
62134 */
63- public static void launchActivity (String packageName , String className , Bundle bundle ) {
64- Utils .getContext ().startActivity (getComponentIntent (packageName , className , bundle ));
135+ public static void startActivity (Bundle extras , String pkg , String cls ) {
136+ startActivity (Utils .getContext (), extras , pkg , cls , extras );
137+ }
138+
139+ /**
140+ * 启动Activity
141+ *
142+ * @param pkg 包名
143+ * @param cls 全类名
144+ * @param options 动画
145+ */
146+ public static void startActivity (String pkg , String cls , Bundle options ) {
147+ startActivity (Utils .getContext (), null , pkg , cls , options );
148+ }
149+
150+ /**
151+ * 启动Activity
152+ *
153+ * @param extras extras
154+ * @param pkg 包名
155+ * @param cls 全类名
156+ * @param options 动画
157+ */
158+ public static void startActivity (Bundle extras , String pkg , String cls , Bundle options ) {
159+ startActivity (Utils .getContext (), extras , pkg , cls , options );
160+ }
161+
162+ private static void startActivity (Context context , Bundle extras , String pkg , String cls , Bundle options ) {
163+ Intent intent = new Intent (Intent .ACTION_VIEW );
164+ if (extras != null ) intent .putExtras (extras );
165+ intent .setComponent (new ComponentName (pkg , cls ));
166+ if (!(context instanceof Activity )) {
167+ intent .addFlags (Intent .FLAG_ACTIVITY_NEW_TASK );
168+ }
169+ if (options == null || Build .VERSION .SDK_INT < Build .VERSION_CODES .JELLY_BEAN ) {
170+ context .startActivity (intent );
171+ } else {
172+ context .startActivity (intent , options );
173+ }
65174 }
66175
67176 /**
@@ -75,10 +184,10 @@ public static String getLauncherActivity(String packageName) {
75184 intent .addCategory (Intent .CATEGORY_LAUNCHER );
76185 intent .addFlags (Intent .FLAG_ACTIVITY_NEW_TASK );
77186 PackageManager pm = Utils .getContext ().getPackageManager ();
78- List <ResolveInfo > infos = pm .queryIntentActivities (intent , 0 );
79- for (ResolveInfo info : infos ) {
80- if (info .activityInfo .packageName .equals (packageName )) {
81- return info .activityInfo .name ;
187+ List <ResolveInfo > info = pm .queryIntentActivities (intent , 0 );
188+ for (ResolveInfo aInfo : info ) {
189+ if (aInfo .activityInfo .packageName .equals (packageName )) {
190+ return aInfo .activityInfo .name ;
82191 }
83192 }
84193 return "no " + packageName ;
@@ -93,7 +202,6 @@ public static String getLauncherActivity(String packageName) {
93202 public static Activity getTopActivity () {
94203 try {
95204 Class activityThreadClass = Class .forName ("android.app.ActivityThread" );
96- @ SuppressWarnings ("unchecked" )
97205 Object activityThread = activityThreadClass .getMethod ("currentActivityThread" ).invoke (null );
98206 Field activitiesField = activityThreadClass .getDeclaredField ("mActivities" );
99207 activitiesField .setAccessible (true );
@@ -118,12 +226,4 @@ public static Activity getTopActivity() {
118226 }
119227 return null ;
120228 }
121-
122- private static Intent getComponentIntent (String packageName , String className , Bundle bundle ) {
123- Intent intent = new Intent (Intent .ACTION_VIEW );
124- if (bundle != null ) intent .putExtras (bundle );
125- ComponentName cn = new ComponentName (packageName , className );
126- intent .setComponent (cn );
127- return intent .addFlags (Intent .FLAG_ACTIVITY_NEW_TASK );
128- }
129229}
0 commit comments