2016-12-03 12 views
5

Мне нужно получить название пакета активности блокировки Android. Я не нашел ничего, кроме https://stackoverflow.com/a/16881064/2803557, который, похоже, не работает.Динамическое получение андроида блокировки экрана имя пакета

Есть ли способ, чтобы получить блокировку экрана имя пакета

+0

блокировка экрана имя упаковки: com.android.systemui Если вы хотите показать что-то на экране блокировки, есть и другие способы для этого. – abhishesh

ответ

0

Получение списка всех процессов, а затем проверить блокировки экрана имя приложения пакета.

Ниже приведен код:

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
List<ActivityManager.RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE); 

long currentMillis = Calendar.getInstance().getTimeInMillis(); 
Calendar cal = Calendar.getInstance(); 

for (ActivityManager.RunningServiceInfo info : services) { 
    cal.setTimeInMillis(currentMillis-info.activeSince); 
    Log.i("TAG", String.format("Process %s has been running since: %d ms",info.process, info.activeSince)); 
} 

Logcat:

TAG: Process com.android.systemui has been running since: 86526 ms 

То есть экран блокировки^

TAG: Process com.qualcomm.telephony has been running since: 68521 ms 
TAG: Process com.motorola.ccc has been running since: 57456 ms 
TAG: Process com.google.android.music:main has been running since: 26245 ms 
TAG: Process com.android.phone has been running since: 29421 ms 
TAG: Process com.motorola.ccc has been running since: 52141 ms 
TAG: Process system has been running since: 28602 ms 
TAG: Process com.motorola.actions has been running since: 74371 ms 
TAG: Process com.motorola.ccc has been running since: 59166 ms 
TAG: Process com.motorola.process.slpc has been running since: 25483 ms 
TAG: Process com.android.systemui has been running since: 30142 ms 
TAG: Process com.android.bluetooth has been running since: 22187 ms 
TAG: Process system has been running since: 28603 ms 
TAG: Process com.google.android.gms.persistent has been running since: 31621 ms 
TAG: Process com.android.systemui has been running since: 27361 ms 
TAG: Process com.google.android.gms.persistent has been running since: 99678 ms 
TAG: Process com.motorola.contacts.preloadcontacts has been running since: 45603 ms 
TAG: Process com.google.android.gms.persistent has been running since: 73457 ms 
TAG: Process com.google.android.gms.persistent has been running since: 72908 ms 
TAG: Process com.google.android.gms.persistent has been running since: 37251 
+0

В этой проблеме я не знаю имя пакета –

+1

@AkashKumar, вы можете получить имя пакета из вопроса, который вы уже упоминали. – Gattsu

+1

@AkashKumar Проверьте [это] (http://stackoverflow.com/questions/40952185/dynamically-getting-android-lock-screen-package-name/41076162#comment69397047_40952185) – Gattsu

1

Вы можете определить имя пакета для любого Activity, который выходит на передний план, анализируя журналы Android. Например, если у вас открыт Google Карты, нажатие на кнопку «Домой» устройства покажет это в журнале (я обычно фильтрую строку ActivityManager).

START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] 
flg=0x10200000 cmp=com.android.launcher/com.android.launcher2.Launcher} 

Это показывает, что имя пакета домашнего экрана Activity является com.android.launcher

Однако, когда я нажимаю мою кнопку Nexus 4 домой, чтобы показать LockScreen из любого приложения, он никогда не показывает другую активность запускаемые , Это заставляет меня думать, что это не то, что мы понимаем как типичный Activity.

Если вы посмотрите на источник для KeyguardViewMediator.java исходного кода Android, вы найдете метод с именем private void doKeyguardLocked(Bundle options). По опыту я знаю, что смена источника для немедленного возврата из этого метода приведет к отключению блокировки экрана. Источник для KeyguardViewMediator.java показывает, что он находится в пакете com.android.keyguard, и я считаю, что это тот пакет, который вы ищете.

Что касается динамического получения имени пакета, это не представляется мне возможным. Но, если вы уже знаете имя пакета раньше времени, тогда нет необходимости получать его динамически.

Надеюсь, это поможет.