9

私は大学の研究プロジェクトに取り組んでいます。アプリは市場に出されることはなく、研究目的でのみ使用されます。

Google ホームスクリーンのサンプル コードを使用して、ホームスクリーン アプリを作成しました。そこで、ロック画面のアクティビティを作成しました。そこにいる間、ユーザーはホーム、戻るなどを押してロックを解除できないようにする必要があります。戻るボタンは無効になっているように見えますが、ホームボタンは無効ではありません。インターネットとスタックオーバーフローからいくつかのソリューションを試しましたが、すべて機能していません。

重要なコードは次のとおりです。

(注意: Logcat は、戻るボタンの場合は「ボタンが押されました: 4」と表示しますが、ホーム ボタンの場合は何も表示しません!)

ロック画面のアクティビティで:

 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        Log.v(TAG, "BUTTON PRESSED: " + new Integer(keyCode).toString());

        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            return true;
        } else if ((keyCode == KeyEvent.KEYCODE_CALL)) {
            return true;
        }
        else if ((keyCode == KeyEvent.KEYCODE_HOME)){
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public void onAttachedToWindow() {
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
        super.onAttachedToWindow();
    }

Android バージョン 4 以降、onAttachedToWindow() メソッドが機能していないようです。ホームボタンを無効にするにはどうすればよいですか?

編集: マニフェスト ファイル:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.home" >

    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.SET_WALLPAPER" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
    <uses-permission android:name="android.permission.NFC" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

    <permission android:name="android.permission.WRITE_SECURE_SETTINGS" >
    </permission>

    <application
        android:icon="@drawable/ic_launcher_home"
        android:label="@string/home_title" >
        <service android:name=".MyService" >
        </service>

        <activity
            android:name="Home"
            android:launchMode="singleInstance"
            android:stateNotNeeded="true"
            android:theme="@style/Theme" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />


            </intent-filter>

            <receiver android:name=".ScreenReceiver" >
                <intent-filter>
                    <action android:name="android.intent.action.SCREEN_ON" />
                    <action android:name="android.intent.action.SCREEN_OFF" />
                    <action android:name="android.intent.action.USER_PRESENT" />
                </intent-filter>
            </receiver>
        </activity>
        <activity
            android:name="Wallpaper"
            android:icon="@drawable/bg_android_icon"
            android:label="Wallpaper" >
            <intent-filter>
                <action android:name="android.intent.action.SET_WALLPAPER" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity android:name=".LockPage" >
            <intent-filter>
                <action android:name="android.intent.action.SCREEN_ON" />
                <action android:name="android.intent.action.SCREEN_OFF" />
                <action android:name="android.intent.action.USER_PRESENT" />
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.MONKEY" />
                <category android:name="android.intent.category.DEFAULT" />

                <action android:name="android.intent.action.MAIN" />

                <data android:mimeType="text/plain" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:scheme="http" />
            </intent-filter>
        </activity>
    </application>

</manifest>
4

5 に答える 5

5

これは少し遅れるかもしれませんが、私は幾分似たような状況にありました. 私の問題は、ユーザーが通話中に通話画面を離れてほしくないということでしたが、それを防ぐことはできなかったので、代わりに、ユーザーが離れるたびに画面を前面に戻しました。

あなたの場合、一時停止時にアプリを前面に戻すだけです。

@Override
protected void onPause() {
    super.onPause();
        // Close and reopen app or bringToFront()
}

そのため、離れると自動的にアプリが再び開きます。アクティビティを再度開くか、最前面に移動して、何が最適かを確認してください。すべてのアニメーションを削除して FLAG_ACTIVITY_NO_ANIMATION を追加すると、再開が目立たなくなることがあります。

于 2013-01-30T05:27:35.007 に答える
2
@Override  
public void onAttachedToWindow()  
{  
    super.onAttachedToWindow();
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);           
}

そして、キーイベントを次のように処理します。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if(keyCode == KeyEvent.KEYCODE_HOME)
    {
        Log.i("Home Button","Clicked");
    }
    if(keyCode==KeyEvent.KEYCODE_BACK)
    {
        finish();
    }
 return false;
}
于 2013-02-05T19:18:30.123 に答える
2

ホーム画面のアプリケーションで、ホーム ボタンを押してもアプリに転送されないようです。したがって、通常のアプリを作成し、broadcastReceiver とサービスを入れて、ホームボタンと戻るボタンを無効にできるようになりました。

それでも、最近のアプリ ボタンを使用して、ロック画面から飛び出すことができます。機能する可能性のあるダミーエントリであふれさせることができます。

それが誰かを助けることを願っています!

于 2012-07-06T11:14:31.713 に答える
1

このコードは私のアプリケーションで機能します

@Override 
public void onAttachedToWindow() {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
    super.onAttachedToWindow(); 
}
于 2013-02-06T07:15:08.760 に答える
1

これは、Android ソースを変更しない限り不可能です: [ここで言及][1]。

また、これは推奨されない Android アクティビティ サイクルを壊します。

于 2012-07-03T09:26:48.437 に答える