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;
 }
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容