Android 获取当前activity所在类SimpleNa

2018-01-27  本文已影响166人  silencefun

在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;
 }
上一篇下一篇

猜你喜欢

热点阅读