/ / Wie kann ich Paketnamen in Android bekommen? - Java, Android

Wie kann ich Paketnamen in Android erhalten? - Java, Android

Ich muss selbst eine Util-Klasse schreiben und ichbrauche den Paketnamen der Android App. Während ich den packageManager gefunden habe, der nur in Activity verwendet werden kann und so weiter, hat das Kontext. Ich möchte nur Paketname in meiner Klasse bekommen, die in Android App verwendet wird. Wie kann ich das tun? Vielen Dank!

Antworten:

32 für die Antwort № 1

Benutzen : getPackageManager().getPackageInfo(getPackageName(), 0).packageName Oder nur MyContext.getPackageName()

Sie können auch eine Funktion erstellen:

public String getPackageName(Context context) {
return context.getPackageName();
}

12 für die Antwort № 2

Die folgende Konstante ist verfügbar, ohne dass ein Kontext benötigt wird.

BuildConfig.APPLICATION_ID

4 für die Antwort № 3

Sie können den Paketnamen der installierten App abrufen:

ArrayList<PackageInfo> res = new ArrayList<PackageInfo>();
PackageManager pm = getApplicationContext().getPackageManager();
List<PackageInfo> packs = pm.getInstalledPackages(0);

und wenn Sie den Paketnamen Ihrer App finden möchten:

context.getPackageName();

2 für die Antwort № 4

getApplicationContext().getPackageName() gibt den Namen des Pakets an.


1 für die Antwort № 5
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


}

1 für die Antwort № 6

Sie können eine Util-Klasse folgendermaßen erstellen:

public class AppInfo{
private static Context cxt;
public static String PACKAGE_INFO;
public static String init(Context context){
cxt = context;
PACKAGE_INFO = cxt.getPackageName();
}
}

dann kannst du es auf diese Weise benutzen

public class MyActivity extends Activity{
@Override
public void onCreate(Bundle bundle){
...
AppInfo.init(getApplicationContext());
...
}
}

dann kannst du es so nennen:

public class someClass{
public void someMethod(){
String packageInfo = AppInfo.PACKAGE_INFO;
//Do what you wish
}
}

1 für die Antwort № 7

Ich habe die folgenden beiden Möglichkeiten gesehen, den Paketnamen ausgehend von einer Kontextvariablen abzurufen:

context.getPackageManager().getPackageInfo(context.getPackageName(), 0).packageName

und

context.getPackageName()

Haben sie nicht immer die gleiche Antwort? Ist es unter bestimmten Umständen vorzuziehen, den anderen zu benutzen?


1 für die Antwort № 8

Ich denke getPackageName() ist direkt innerhalb der Aktivität verfügbar, ohne anzurufen getApplicationContext. Überprüft es selbst. Arbeiten gut.


0 für die Antwort № 9

Hier fügen Sie das zu Ihrer util-Klasse hinzu. Es stellt sicher, dass verschiedene "Flavors" und Debug / Release Builds behandelt werden, wie andere Antworten nicht:

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