2015-12-21 4 views
-1

Я работаю с пользовательской клавиатурой, мне нужно имя текущего пакета, когда клавиатура открыта. Эта клавиатура будет открыта с различными приложениями, поэтому мне нужно, чтобы это имя приложения было открыто в настоящее время. Я использую следующий код, но он работает неправильно.Android получить имя пакета текущего открытого приложения

ActivityManager mActivityManager = (ActivityManager)PhotoActivity.this.getSystemService(Context.ACTIVITY_SERVICE); 
      if(Build.VERSION.SDK_INT > 20){ 
       String mPackageName = mActivityManager.getRunningAppProcesses().get(0).processName; 
       Log.e("Checking package:  ","Checking current application package"+mPackageName); 
      } 
      else{ 
       String mPackageName = mActivityManager.getRunningTasks(1).get(0).topActivity.getPackageName(); 
      } 
+1

Это дубликат около тысячи вопросов. FYI, взлом, который вы используете, был сломан в Android 5.1.1 и 6.0. Официально санкционированная замена - это API статистики использования, но он недоступен на всех устройствах. –

ответ

1

получая имя текущего пакета в андроида

 ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 

// display the current class name 
     Toast.makeText(getApplicationContext(), taskInfo.get(0).topActivity.getClassName(), Toast.LENGTH_LONG).show(); 
     ComponentName componentInfo = taskInfo.get(0).topActivity; 

// current class package name 
      String packageName = componentInfo.getPackageName(); 

добавить это в свой проект манифеста разрешения

<uses-permission android:name="android.permission.GET_TASKS"/> 
0
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 

Log.d("current task :", "CURRENT Activity ::" + taskInfo.get(0).topActivity.getPackageName()); 
+0

Этот хак был взломан на Android 5.0. –

+0

Привет, он возвращает null –

0

Используйте следующий код: -

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
List l = am.getRecentTasks(1, ActivityManager.RECENT_WITH_EXCLUDED); 
Iterator i = l.iterator(); 
PackageManager pm = this.getPackageManager(); 
while (i.hasNext()) { 
    ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next()); 
    try { 
     CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(
     info.processName, PackageManager.GET_META_DATA)); 
     Log.w("LABEL", c.toString()); 
    } catch (Exception e) { 
     // Name Not FOund Exception 
    } 
} 

И не забывайте использовать разрешение

<uses-permission android:name="android.permission.GET_TASKS"/> 
+0

Привет, Равиндра Кушваха, Спасибо за ответ. Он не работает должным образом, поскольку он получает такое же имя пакета пользовательской клавиатуры вместо текущего запуска открытого приложения. Я использую в Android 5.0 –

+0

@SakibSyed ... Хорошо ... позвольте мне попробовать ... –

 Смежные вопросы

  • Нет связанных вопросов^_^