【背景】
希望在代码中输出log。
之前已经实现了log的功能:
但是默认输出的位置是
sd卡的根目录
导致:
程序运行多次后,在sd卡根目录下生成了太多的log文件,很乱。
希望:
修改log部分代码,使得生成的log文件,都只放在某个文件夹中。
该文件夹,此处打算用项目名称。
所以需要代码中获得项目名。
【折腾过程】
1.参考:
【记录】android中获得res/xml下面的关于USB过滤配置的资源文件信息
去试试:
| getResources(). | 
结果由于不是context所以无法使用该函数。
2.参考:
How to get package name from anywhere?
但是没看到合适的。
3.参考:
Android: Get application name (not package name)
get application name from package name
都是获得app的名字,而不是此处的项目名。
4.期间,又遇到对应的:
【未解决】android中如何拼接路径
5.结果用:
import com.xx.abcde.Start;
public class Start extends Application {
	private static Start instance;
	
	public static Start getInstance() {
	    return instance;
	}
	
    public static Context getContext(){
        return instance;
        // or return instance.getApplicationContext();
    }
    
    //...
}
String projectName = Start.getContext().getPackageName();只能获得:
包的名字:com.xx.abcde
而不是我所希望的:
项目的名字:ABCDE
6.继续去改代码:
String projectName = Start.getContext().getString(Start.getContext().getApplicationInfo().labelRes);
试试效果,结果得到的是app的名字,是中文。
不是我要的英文的项目名称。
7.先用代码:
Context curContext = Start.getContext(); ApplicationInfo appInfo = curContext.getApplicationInfo(); String projectName = appInfo.className;
去调试看看,运行时的变量中信息都是哪些,看看能否找到我要的那个label。
结果在运行时中的ApplicationInfo中,没有找到我要的:
算了,截止目前,还是没有完美的直接获得对应的app_name。
8.参考:
How to get the name of the application in android?
去试试,
		Context curContext = Start.getContext();
		Resources appR = curContext.getResources();
		CharSequence appNameCharSeq = appR.getText(appR.getIdentifier("app_name", "string", curContext.getPackageName()));		
		String projectName = appNameCharSeq.toString();得到的结果,和之前
String projectName = Start.getContext().getString(Start.getContext().getApplicationInfo().labelRes);
效果是一样的。。。
还是那个中文,是app的name。
而不是我要的英文。
9.参考:
How to get the application name of the APK programmatically (not installed)
去试试那个getApplicationLabel
		Context curContext = Start.getContext();
		ApplicationInfo appInfo = curContext.getApplicationInfo();
		PackageManager packageManager = curContext.getPackageManager();
		Resources appR = curContext.getResources();
		
		CharSequence appNameCharSeq = appR.getText(appR.getIdentifier("app_name", "string", curContext.getPackageName()));
		String appLabel = packageManager.getApplicationLabel(appInfo).toString();结果和上面一样:
得到的是中文的app的name。
10.下面的:
		Context curContext = Start.getContext();
		ApplicationInfo appInfo = curContext.getApplicationInfo();
		PackageManager packageManager = curContext.getPackageManager();
		Resources appRes = curContext.getResources();
		
		CharSequence appNameCharSeq = appRes.getText(appRes.getIdentifier("app_name", "string", curContext.getPackageName()));
		String appLabel = packageManager.getApplicationLabel(appInfo).toString();
		String appName = appRes.getString(R.string.app_name);
				
		String projectName = appNameCharSeq.toString();效果还是依旧得到那个中文的app的name。
10.截止目前:
android的项目的:
AndroidManifest.xml
中定义的:
<application
    android:name="com.xx.yy.Start"
    android:label="@string/app_name"
    <activity
        android:name="com.xx.yy.activities.DeviceListActivity"
        android:label="@string/app_name"结果:
程序运行时,之前的代码,始终都只是:
要么是获得的是application的android:name的值;
要是获得的是activity的android:label的值,就没法获得:
application的android:label的值。
【总结】
算了,截止目前,还是没有获得对应的android的项目的AndroidManifest.xml中的application中所定义的那个android:label的值。。。
转载请注明:在路上 » 【未解决】android项目中代码中如何获得对应的项目名