9

私は以下のようにしたい:

ユーザーがハードロック解除ボタンを押します。ロック解除ボタンを押した後、私の活動が始まります。画面のユーザープロンプトの閉じるボタンを使用してアクティビティを閉じた後、パターンロック(またはピンロック)を入力します。右パターンロックを入力すると、ホーム画面が表示されます。

以下のシナリオが必要です。

電源/ロック解除ボタンを押します->アクティビティを開始します->アクティビティの閉じるボタンをクリックします->プロンプトを押してロック解除のパターンを入力します->パターンを入力します->ホーム画面を表示します

現在、以下のように実行されています。

のブロードキャストレシーバーを使用しACTION_USER_PRESENTて、ユーザーがパターンを入力し、デバイスのロックが解除された後にアクティビティを取得しました

のブロードキャストレシーバーを使用してACTION_SCREEN_ON、ロック解除ボタンを押した後にログにメッセージが表示されましたが、ユーザーがパターンを入力してデバイスのロックが解除された後、アクティビティが開始されます。

ACTION_SCREEN_ONとのイベントを受信するためにBroadcastReceiverを使用してみACTION_USER_PRESENTました。

私のコードは以下の通りです:

放送受信機-

public class BrodcastReceiver extends BroadcastReceiver 
{

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        Log.d("receiver", "main");

        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) 
        {
            // do whatever you need to do here
            Log.d("receiver", "screen off");
        }
        else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) 
        {
            // and do whatever you need to do here
            Log.d("receiver", "screen on");
            context.startActivity(new Intent(context,
                    unlock_image.class)
                    .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
                    .setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT)
                    .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
            Log.d("receiver", "aft activity");
        }
        else if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) 
        {
            Log.d("receiver", "unlock");

            context.startActivity(new Intent(context,
                    unlock_image.class)
                    .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
        }     
    }

BroadcastListnerの登録-

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        filter.addAction(Intent.ACTION_USER_PRESENT);
        BroadcastReceiver mReceiver = new BrodcastReceiver();
        registerReceiver(mReceiver, filter);  

たくさんやってみましたが、欲しいものが手に入りません。誰かがアイデアを持っているなら、どんな助けでもありがたいです、私が望むように期待される結果を得る方法。

4

1 に答える 1

2

アクティビティを開始するように追加WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKEDしてみてください。これにより、アクティビティが他のすべてのウィンドウの上にある限り、キーガード/キーロックが一時的に無効になります。

于 2012-11-07T02:30:20.370 に答える