我需要自己编写一些util类,我需要android app的packagename。 虽然我发现packageManager只能用于具有上下文的Activity等。我只想在我的类中获取packagename,这将在android应用程序中使用。那我该怎么做呢?谢谢!
答案 0 :(得分:33)
使用:getPackageManager().getPackageInfo(getPackageName(), 0).packageName
或者只是MyContext.getPackageName()
您还可以创建一个功能:
public String getPackageName(Context context) {
return context.getPackageName();
}
答案 1 :(得分:12)
以下常量可用,无需上下文。
BuildConfig.APPLICATION_ID
答案 2 :(得分:4)
您可以获取已安装应用的包名称:
ArrayList<PackageInfo> res = new ArrayList<PackageInfo>();
PackageManager pm = getApplicationContext().getPackageManager();
List<PackageInfo> packs = pm.getInstalledPackages(0);
如果您想查找应用的包名称:
context.getPackageName();
答案 3 :(得分:2)
getApplicationContext().getPackageName()
将提供包名称。
答案 4 :(得分:1)
List<ApplicationInfo> packages;
PackageManager pm;
pm = getPackageManager();
get a list of installed apps.
packages = pm.getInstalledApplications(0);
ActivityManager mActivityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
for (ApplicationInfo packageInfo : packages) {
//packageInfo.packageName contains package name
}
答案 5 :(得分:1)
你可以用这种方式创建一个Util类:
public class AppInfo{
private static Context cxt;
public static String PACKAGE_INFO;
public static String init(Context context){
cxt = context;
PACKAGE_INFO = cxt.getPackageName();
}
}
那么你可以这样使用它
public class MyActivity extends Activity{
@Override
public void onCreate(Bundle bundle){
...
AppInfo.init(getApplicationContext());
...
}
}
然后你可以这样称呼它:
public class someClass{
public void someMethod(){
String packageInfo = AppInfo.PACKAGE_INFO;
//Do what you wish
}
}
答案 6 :(得分:1)
我已经看到以下两种方法从Context变量开始获取包名称:
context.getPackageManager().getPackageInfo(context.getPackageName(), 0).packageName
和
context.getPackageName()
他们不会总是给出相同的答案吗?在某些情况下,有一种方法比另一种更好吗?
答案 7 :(得分:1)
我认为getPackageName()
可直接在活动中使用,而无需调用getApplicationContext
。自己检查一下。工作得很好。
答案 8 :(得分:0)
这里将此添加到您的util类中。它确保处理不同的“风格”和调试/发布版本,因为其他答案不会:
@Nullable
public static String getApplicationPackageName(@NonNull Context context)
{
final PackageInfo packageInfo = getPackageInfo(context);
if (packageInfo.applicationInfo == null)
{
return null;
}
// Returns the correct “java” package name that was defined in your
// AndroidManifest.xml.
return packageInfo.applicationInfo.packageName;
}
// Convenience method for getting the applications package info.
@NonNull
private static PackageInfo getPackageInfo(@NonNull final Context context)
{
final PackageManager packageManager = context.getPackageManager();
try
{
return packageManager.getPackageInfo(context.getPackageName(), 0);
}
catch (final PackageManager.NameNotFoundException ignored)
{
//noinspection ConstantConditions: packageInfo should always be available for the embedding app.
return null;
}
}