2

ユーザーがロック解除画面をクリックすると、アプリを実行する必要があります。BroadcastReceiver で ACTION_USER_PRESENT インテントを使用して確認しました。次のコードを使用しました。ロック解除画面の前にアプリを表示する必要があります。しかし、画面のロックを解除するとアプリが表示されます。どんな助けでも大歓迎です。

私のブロードキャストレシーバー

package com.progressindicator;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.view.WindowManager;

public class Receive extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        if (intent.getAction() != null) {
            if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {

                Intent s = new Intent(context, ProgressIndicator.class);
                s.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
                // s.setFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

                s.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                s.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                context.startActivity(s);
            }
        }
    }
}

マニフェスト

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.progressindicator"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.progressindicator.ProgressIndicator"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <receiver android:name=".Receive" >
            <intent-filter
                android:enabled="true"
                android:exported="false" >
                <action android:name="android.intent.action.USER_PRESENT" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

マイ アクティビティ:

package com.progressindicator;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class ProgressIndicator extends Activity {
    ImageView loading;
    AnimationDrawable loadAnimation;
    private Window wind;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_progress_indicator);
    //  requestWindowFeature(Window.FEATURE_NO_TITLE);
    //  requestWindowFeature(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
//      wind = this.getWindow();
//      wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
//      wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
//      wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);

        getWindow().addFlags(

                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 

            );
        LinearLayout main = new LinearLayout(this);
        main.setOrientation(LinearLayout.VERTICAL);
        setContentView(main);

        loading = new ImageView(this);
        loading.setImageResource(R.drawable.loading);
        loadAnimation = (AnimationDrawable)loading.getDrawable();
        main.addView(loading);
    }
    @Override
    public void onWindowFocusChanged(boolean hasFocus){

    loadAnimation.start();

    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.progress_indicator, menu);
        return true;
    }

}
4

3 に答える 3

1

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

于 2015-07-27T21:25:17.387 に答える
0

しばらく前にこれをプロジェクトに使用しました

// set flags for staying on and lockscreen
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
       | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);

また、Intent パラメータをチェックして、新しいアクティビティの作成と onCreate が呼び出されていることを確認します。

ロック画面を無効にする場合は、デバイス管理者である必要があります。

編集:

ACTION_USER_PRESENT は、ユーザーが画面のロックを解除した後に送信されるため、ロック画面の上に画面を表示するには機能しません。

ACTION_SCREEN_ON に変更する必要があります。

編集2:私が持っているマニフェストandroid:launchMode="singleTask"で、意図的に次のようにアクティビティを呼び出します:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
于 2013-07-17T12:16:42.280 に答える