Android: получить имя приложения из типа учетной записи

Мое приложение должно знать имя приложения из типа учетной записи. Я получаю тип учетной записи из кода:

AccountManager am = AccountManager.get(this);
Account[] acc = am.getAccounts();
if (acc.length > 0) {
    for (int accLength = 0; accLength < acc.length; accLength++) {
            Log.d("Accounts : ", "" + acc[accLength].name+"-"+ acc[accLength].type);                
    }
}

Например, я получаю тип учетной записи как «com.whatsapp», но я хочу, чтобы имя было «Whats App».

Изменить У меня есть много учетных записей на моем устройстве, например, facebook, viber, whats app, skype и т. д.

Для скайпа я получаю тип учетной записи как com.skype.contacts.sync

и использовал код как:

PackageManager packageManager = getApplicationContext().getPackageManager();
try {
    String appName = (String) packageManager.getApplicationLabel(packageManager.getApplicationInfo(acc[accLength].type, PackageManager.GET_META_DATA));
    Log.d("AppName", "" + appName);
} catch (NameNotFoundException e) {
    e.printStackTrace();
}

чтобы получить имя приложения, и я получил следующую ошибку:

11-03 11:38:10.681: W/System.err(4684): android.content.pm.PackageManager$NameNotFoundException: com.skype.contacts.sync
11-03 11:38:10.681: W/System.err(4684):     at android.app.ApplicationPackageManager.getApplicationInfo(ApplicationPackageManager.java:243)
11-03 11:38:10.681: W/System.err(4684):     at com.example.cd.SplashScreenActivity.initializeScreen(SplashScreenActivity.java:48)
11-03 11:38:10.681: W/System.err(4684):     at com.example.cd.SplashScreenActivity.onCreate(SplashScreenActivity.java:33)
11-03 11:38:10.681: W/System.err(4684):     at android.app.Activity.performCreate(Activity.java:5541)
11-03 11:38:10.681: W/System.err(4684):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
11-03 11:38:10.681: W/System.err(4684):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2411)
11-03 11:38:10.681: W/System.err(4684):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2507)
11-03 11:38:10.681: W/System.err(4684):     at android.app.ActivityThread.access$900(ActivityThread.java:172)
11-03 11:38:10.681: W/System.err(4684):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
11-03 11:38:10.681: W/System.err(4684):     at android.os.Handler.dispatchMessage(Handler.java:102)
11-03 11:38:10.681: W/System.err(4684):     at android.os.Looper.loop(Looper.java:146)
11-03 11:38:10.686: W/System.err(4684):     at android.app.ActivityThread.main(ActivityThread.java:5692)
11-03 11:38:10.686: W/System.err(4684):     at java.lang.reflect.Method.invokeNative(Native Method)
11-03 11:38:10.686: W/System.err(4684):     at java.lang.reflect.Method.invoke(Method.java:515)
11-03 11:38:10.686: W/System.err(4684):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
11-03 11:38:10.686: W/System.err(4684):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
11-03 11:38:10.686: W/System.err(4684):     at dalvik.system.NativeStart.main(Native Method)

Я искал в Google, но не смог выполнить задачу. Подскажите пожалуйста, что мне делать для этого...


person Manoj Fegde    schedule 03.11.2015    source источник
comment
Вы можете использовать диспетчер пакетов, чтобы получить имя приложения из имени пакета, например: stackoverflow.com/questions/5841161/   -  person Eric B.    schedule 03.11.2015
comment
тип учетной записи — это имя пакета, и с помощью PackageManager вы можете получить имя приложения.   -  person Vibhor Chopra    schedule 03.11.2015
comment
Пожалуйста, посмотрите на мой отредактированный вопрос   -  person Manoj Fegde    schedule 03.11.2015
comment
@VibhorChopra Это не всегда. Например, у нас есть com.google, который не является именем пакета какого-либо приложения. Не говоря уже о (пустая строка) в качестве типа учетной записи, относящейся к самому устройству.   -  person android developer    schedule 28.02.2021