Android 获取当前activity所在类SimpleName

在Android,即Lollipop(api level 21)之前, 使用如下代码来获得当前运行的app,即所谓的top Activity:

<uses-permission android:name="android.permission.GET_TASKS" /> 
private String getRunningActivityName(){          
    ActivityManager activityManager=(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);  
    String runningActivity=activityManager.getRunningTasks(1).get(0).topActivity.getClassName();  
    return runningActivity;                 
    }

其中 获取包名、完整类名、类名可以这样做:

ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    RunningTaskInfo info = manager.getRunningTasks(1).get(0);
    String shortClassName = info.topActivity.getShortClassName();    //类名
    String className = info.topActivity.getClassName();              //完整类名
    String packageName = info.topActivity.getPackageName();          //包名

场景:收到消息根据不同activity添加不同的标签做区别,对应的最顶层即前台处理来处理。

就是getShortClassName()不起效,或者说不是想要的activity所在的类de名,查看了源码才知道:

    /**
 * Return the class name, either fully qualified or in a shortened form
 * (with a leading '.') if it is a suffix of the package.
 */
public String getShortClassName() {
    if (mClass.startsWith(mPackage)) {
        int PN = mPackage.length();
        int CN = mClass.length();
        if (CN > PN && mClass.charAt(PN) == '.') {
            return mClass.substring(PN, CN);
        }
    }
    return mClass;
}

其中mPackage是包名,mClass是完整的类名,根据源码可以看出来是从完整中截取不是包名的部分如果开始不是 包名,那就返回完整路径(因为 Eclipse 项目没有 application id的概念 application id等同于 包名,但是 Android Studio 是可以不同的)

所以 最后改进的 方法为参考getClass().getSimpleName()

    String simpleName = getName();
    final int dot = simpleName.lastIndexOf(".");
    if (dot > 0) {
        return simpleName.substring(simpleName.lastIndexOf(".")+1); // strip the package name
    }  

0

 if (runningTaskInfos != null) {

        String ClassName = (runningTaskInfos.get(0).topActivity).getClassName();
       //找到最后一个 '.'的位置来截取返回
        int p = ClassName.lastIndexOf('.');
        String ShortClassName= ClassName.substring(p+1, ClassName.length());

        return ShortClassName;
 }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容