Skip to content

Commit e9ca2d1

Browse files
committed
see 01/24 log
1 parent 69b11e1 commit e9ca2d1

File tree

16 files changed

+189
-356
lines changed

16 files changed

+189
-356
lines changed

app/src/main/java/com/blankj/androidutilcode/activities/ActivityActivity.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,16 @@ protected void onCreate(Bundle savedInstanceState) {
3535

3636
findViewById(R.id.btn_launch_image_activity).setOnClickListener(this);
3737

38-
tvAboutActivity.setText("Is ImageActivity Exists: " + ActivityUtils.isActivityExists(this, packageName, className)
39-
+ "\ngetLauncherActivity: " + ActivityUtils.getLauncherActivity(this, packageName)
38+
tvAboutActivity.setText("Is ImageActivity Exists: " + ActivityUtils.isActivityExists(packageName, className)
39+
+ "\ngetLauncherActivity: " + ActivityUtils.getLauncherActivity(packageName)
4040
);
4141
}
4242

4343
@Override
4444
public void onClick(View view) {
4545
switch (view.getId()) {
4646
case R.id.btn_launch_image_activity:
47-
ActivityUtils.launchActivity(this, packageName, className);
47+
ActivityUtils.launchActivity(packageName, className);
4848
break;
4949
}
5050
}

app/src/main/java/com/blankj/androidutilcode/activities/AppActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public void run() {
7070
AppUtils.uninstallAppSilent(this, this.getPackageName(), false);
7171
break;
7272
case R.id.btn_launch_app:
73-
AppUtils.launchApp(this, this.getPackageName());
73+
AppUtils.launchApp(this.getPackageName());
7474
break;
7575
case R.id.btn_get_app_details_settings:
7676
AppUtils.getAppDetailsSettings(this);

app/src/main/java/com/blankj/androidutilcode/activities/DeviceActivity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,10 @@ public void onClick(View view) {
4848
break;
4949
case R.id.btn_reboot:
5050
DeviceUtils.reboot();
51+
break;
5152
case R.id.btn_reboot_to_recovery:
5253
DeviceUtils.reboot2Recovery();
54+
break;
5355
case R.id.btn_reboot_to_bootloader:
5456
DeviceUtils.reboot2Bootloader();
5557
break;

update_log.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
* 16/01/16 LogUtils新增打印类名函数名及所在行
2-
* 16/12/26 新增阴历相关工具类
3-
* 16/12/21 SpannableStringUtils撒花完结
1+
* 17/01/24
2+
* 17/01/16 LogUtils新增打印类名函数名及所在行
3+
* 17/12/26 新增阴历相关工具类
4+
* 17/12/21 SpannableStringUtils撒花完结
45
* 16/12/19 SpannableStringUtils完善中
56
* 16/12/18 SpannableStringUtils采用构造者模式
67
* 16/12/17 完善SpannableStringUtils中
Lines changed: 51 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package com.blankj.utilcode.utils;
22

3+
import android.app.Activity;
34
import android.content.Context;
45
import android.content.Intent;
56
import android.content.pm.PackageManager;
67
import android.content.pm.ResolveInfo;
8+
import android.os.Build;
79
import android.os.Bundle;
10+
import android.util.ArrayMap;
811

12+
import java.lang.reflect.Field;
13+
import java.util.HashMap;
914
import java.util.List;
15+
import java.util.Map;
1016

1117
/**
1218
* <pre>
@@ -25,53 +31,50 @@ private ActivityUtils() {
2531
/**
2632
* 判断是否存在Activity
2733
*
28-
* @param context 上下文
2934
* @param packageName 包名
3035
* @param className activity全路径类名
3136
* @return {@code true}: 是<br>{@code false}: 否
3237
*/
33-
public static boolean isActivityExists(Context context, String packageName, String className) {
38+
public static boolean isActivityExists(String packageName, String className) {
3439
Intent intent = new Intent();
3540
intent.setClassName(packageName, className);
36-
return !(context.getPackageManager().resolveActivity(intent, 0) == null ||
37-
intent.resolveActivity(context.getPackageManager()) == null ||
38-
context.getPackageManager().queryIntentActivities(intent, 0).size() == 0);
41+
return !(Utils.getContext().getPackageManager().resolveActivity(intent, 0) == null ||
42+
intent.resolveActivity(Utils.getContext().getPackageManager()) == null ||
43+
Utils.getContext().getPackageManager().queryIntentActivities(intent, 0).size() == 0);
3944
}
4045

4146
/**
4247
* 打开Activity
4348
*
44-
* @param context 上下文
4549
* @param packageName 包名
4650
* @param className 全类名
4751
*/
48-
public static void launchActivity(Context context, String packageName, String className) {
49-
launchActivity(context, packageName, className, null);
52+
public static void launchActivity(String packageName, String className) {
53+
launchActivity(packageName, className, null);
5054
}
5155

5256
/**
5357
* 打开Activity
5458
*
55-
* @param context 上下文
5659
* @param packageName 包名
5760
* @param className 全类名
5861
* @param bundle bundle
5962
*/
60-
public static void launchActivity(Context context, String packageName, String className, Bundle bundle) {
61-
context.startActivity(IntentUtils.getComponentIntent(packageName, className, bundle));
63+
public static void launchActivity(String packageName, String className, Bundle bundle) {
64+
Utils.getContext().startActivity(IntentUtils.getComponentIntent(packageName, className, bundle));
6265
}
6366

6467
/**
6568
* 获取launcher activity
6669
*
67-
* @param context 上下文
6870
* @param packageName 包名
6971
* @return launcher activity
7072
*/
71-
public static String getLauncherActivity(Context context, String packageName) {
73+
public static String getLauncherActivity(String packageName) {
7274
Intent intent = new Intent(Intent.ACTION_MAIN, null);
7375
intent.addCategory(Intent.CATEGORY_LAUNCHER);
74-
PackageManager pm = context.getPackageManager();
76+
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
77+
PackageManager pm = Utils.getContext().getPackageManager();
7578
List<ResolveInfo> infos = pm.queryIntentActivities(intent, 0);
7679
for (ResolveInfo info : infos) {
7780
if (info.activityInfo.packageName.equals(packageName)) {
@@ -80,4 +83,38 @@ public static String getLauncherActivity(Context context, String packageName) {
8083
}
8184
return "no " + packageName;
8285
}
86+
87+
88+
/**
89+
* 获取栈顶Activity
90+
*
91+
* @return 栈顶Activity
92+
*/
93+
public static Activity getTopActivity() {
94+
try {
95+
Class activityThreadClass = Class.forName("android.app.ActivityThread");
96+
Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null);
97+
Field activitiesField = activityThreadClass.getDeclaredField("mActivities");
98+
activitiesField.setAccessible(true);
99+
Map activities = null;
100+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
101+
activities = (HashMap) activitiesField.get(activityThread);
102+
} else {
103+
activities = (ArrayMap) activitiesField.get(activityThread);
104+
}
105+
for (Object activityRecord : activities.values()) {
106+
Class activityRecordClass = activityRecord.getClass();
107+
Field pausedField = activityRecordClass.getDeclaredField("paused");
108+
pausedField.setAccessible(true);
109+
if (!pausedField.getBoolean(activityRecord)) {
110+
Field activityField = activityRecordClass.getDeclaredField("activity");
111+
activityField.setAccessible(true);
112+
return (Activity) activityField.get(activityRecord);
113+
}
114+
}
115+
} catch (Exception e) {
116+
e.printStackTrace();
117+
}
118+
return null;
119+
}
83120
}

utilcode/src/main/java/com/blankj/utilcode/utils/AppUtils.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ private AppUtils() {
3636
* @return {@code true}: 已安装<br>{@code false}: 未安装
3737
*/
3838
public static boolean isInstallApp(Context context, String packageName) {
39-
return !StringUtils.isSpace(packageName) && IntentUtils.getLaunchAppIntent(context, packageName) != null;
39+
return !StringUtils.isSpace(packageName) && IntentUtils.getLaunchAppIntent(packageName) != null;
4040
}
4141

4242
/**
@@ -157,12 +157,11 @@ public static boolean isAppRoot() {
157157
/**
158158
* 打开App
159159
*
160-
* @param context 上下文
161160
* @param packageName 包名
162161
*/
163-
public static void launchApp(Context context, String packageName) {
162+
public static void launchApp(String packageName) {
164163
if (StringUtils.isSpace(packageName)) return;
165-
context.startActivity(IntentUtils.getLaunchAppIntent(context, packageName));
164+
Utils.getContext().startActivity(IntentUtils.getLaunchAppIntent(packageName));
166165
}
167166

168167
/**
@@ -174,7 +173,7 @@ public static void launchApp(Context context, String packageName) {
174173
*/
175174
public static void launchApp(Activity activity, String packageName, int requestCode) {
176175
if (StringUtils.isSpace(packageName)) return;
177-
activity.startActivityForResult(IntentUtils.getLaunchAppIntent(activity, packageName), requestCode);
176+
activity.startActivityForResult(IntentUtils.getLaunchAppIntent(packageName), requestCode);
178177
}
179178

180179
/**

0 commit comments

Comments
 (0)