美文网首页
Android 获取当前activity所在类SimpleNa

Android 获取当前activity所在类SimpleNa

作者: silencefun | 来源:发表于2018-01-27 15:28 被阅读166次

    在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;
     }

    相关文章

      网友评论

          本文标题:Android 获取当前activity所在类SimpleNa

          本文链接:https://www.haomeiwen.com/subject/gqmnaxtx.html