2016-09-09 5 views
1

Я использовал решение оттуда: Android - detect phone unlock event, not screen onDetect экран разблокировки

Итак, моя деятельность OnCreate:

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    registerReceiver(
     new PhoneUnlockedReceiver(), new IntentFilter("android.intent.action.USER_PRESENT") 
    ); 
} 

И мой класс приемника:

public class PhoneUnlockedReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     KeyguardManager keyguardManager = 
      (KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE); 
     if (keyguardManager.isKeyguardSecure()) 
     { 
      Toast.makeText(context, "Screen unlocked", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

Но это не работает, мой onReceive метод никогда не называется. Какие-нибудь идеи, что не так?

My Android Manifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest package="com.example.michal.popupmenu" 
      xmlns:android="http://schemas.android.com/apk/res/android"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 

       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Насколько я знаю, нет необходимости добавлять что-нибудь проявить, если я выбираю использовать registerReceiver, верно?

+0

напишите свой Manifest.xml здесь – Nikhil

+0

Возможный дубликат [Способ получения разблокировки в android?] (Http://stackoverflow.com/questions/20224637/a-way-to-get-unlock-event-in -android) – user392117

+0

Это работает, если вы зарегистрировались в манифесте вместо этого? –

ответ

1

Насколько я знаю, нет необходимости добавлять что-либо к манифесту, если я предпочитаю использовать registerReceiver, не так ли?

Неправильно. Преимущество зарегистрированного приемника в манифесте состоит в том, что он не требует, чтобы ваше приложение запускалось при запуске Intent.

Таким образом, ваше приложение, вероятно, неактивно, когда пользователь разблокирует экран, чтобы не было вызвано registerReceiver(), и поэтому ваш ресивер не реагирует.

Добавить приемник в ваш манифест, и он будет работать.

+0

Вы правы. Я добавил в манифест, и он работает. – user1209216

0

Извините, но может ли кто-нибудь объяснить эту функцию: keyguardManager.isKeyguardSecure() всегда возвращает false, когда я не устанавливаю PIN-код/​​шаблон/пароль, возвращаю true при установке PIN-кода/шаблона/пароля, хотя экран заблокирован/разблокирован. Так как же код выше бега:

if (keyguardManager.isKeyguardSecure()) 
     { 
      Toast.makeText(context, "Screen unlocked", Toast.LENGTH_LONG).show(); 
     } 

Спасибо.

+0

Я удалил его из своего кода, я только использовал onReceive. Я не уверен, что это было слишком. – user1209216