2016-09-09 3 views
1

のロックを解除:Android - detect phone unlock event, not screen onは、画面を検出し、私はそこからソリューションを使用

をだから、私の活動の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方法を働いていません決して呼ばれない。どのようなアイデアが間違っている?

私のAndroidのマニフェスト:

<?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

[アンドロイドでロック解除イベントを取得する方法は?](http://stackoverflow.com/questions/20224637/a-way-to-get-unlock-event-in -android) – user392117

+0

代わりにマニフェストに登録すると機能しますか? –

答えて

1

私が知っている限り、私がregisterReceiverの使用を選択した場合は、何も追加する必要はありません。

間違っています。マニフェストに登録された受信機の利点は、Intentが起動されたときにアプリが実行される必要がないという事実です。

したがって、ユーザが画面をロック解除してregisterReceiver()が呼び出されないため、受信者が反応しないため、おそらくあなたのアプリはアクティブではありません。

マニフェストに受信機を追加すると動作します。

+0

あなたは正しいです。私はマニフェストに追加し、それは動作します。 – user1209216

0

私はPIN /パターン/パスワードを設定しないと常にfalseを返します。画面がロック/ロック解除されていてもPIN /パターン/パスワードを設定するとtrueを返します。 それでは、どのようにできたランニング上記のコード:

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

感謝。

+0

私は自分のコードから削除しました。私はonReceiveだけを使用しました。私はあまりにもそれが何だったかわからない。 – user1209216

関連する問題