2016-08-01 9 views
-1

アンドロイドスタジオでロック画面アプリを開発しています。 HOMEボタンを無効にすることはできません。しかし、プレイストアには非常に多くのロック画面アプリケーションがあります。彼らはどうしているのですか?それらのアプリでホームボタンを押すと何も起こりません。 keyguardのタイプは推奨されておらず、またキーロックもありません。何もしない、または同じ画面にするために、ホームボタンをどうやって作るのか教えてください。今ではホーム画面にしたいとは思っていません。なぜなら、ユーザーはホーム画面を選択することができますし、ロック画面アプリを開発しています。これが唯一の解決策であれば、自分の画面をホーム画面プログラム的にどうぞ、正解をください。アンドロイドのロック画面のホームボタンの動作を変更する

+0

http://stackoverflow.com/a/10025904/5515371 –

+0

'にonKeyDown()'メソッドを実装し、そこにボタンの押しをキャッチし、これを試してみてください。 – Shark

+0

ありがとう@MujammilAhamedしかし、私が言っていたことはアンドロイドが今変更されていることです。私はKeylockerがそこにないことを意味します、キーガードはそこにありませんまたTYPE_KEYGUARDはそこにありません。だから、今日はうまくいくコードに私を紹介してください。 –

答えて

1

Googleで多くの検索を行った後。私はついに解決策を見つけました。私はGitHubでそれを見つけました。もし興味があれば。

your package name; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.view.MotionEvent; 
import android.view.WindowManager; 
import android.widget.FrameLayout; 
import com.amigo.hammad.screenlock7292016.R; 

import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; 
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; 
import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; 
import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; 

public class HomeKeyLocker { 
private OverlayDialog mOverlayDialog; 

public void lock(Activity activity) { 
    if (mOverlayDialog == null) { 
     mOverlayDialog = new OverlayDialog(activity); 
     mOverlayDialog.show(); 
    } 
} 

public void unlock() { 
    if (mOverlayDialog != null) { 
     mOverlayDialog.dismiss(); 
     mOverlayDialog = null; 
    } 
} 

private static class OverlayDialog extends AlertDialog { 

    public OverlayDialog(Activity activity) { 
     super(activity, R.style.AppTheme); 
     WindowManager.LayoutParams params = getWindow().getAttributes(); 
     params.type = TYPE_SYSTEM_ERROR; 
     params.dimAmount = 0.0F; // transparent 
     params.width = 0; 
     params.height = 0; 
     params.gravity = Gravity.BOTTOM; 
     getWindow().setAttributes(params); 
     getWindow().setFlags(FLAG_SHOW_WHEN_LOCKED | FLAG_NOT_TOUCH_MODAL, 0xffffff); 
     setOwnerActivity(activity); 
     setCancelable(false); 
    } 

    public final boolean dispatchTouchEvent(MotionEvent motionevent) { 
     return true; 
    } 

    protected final void onCreate(Bundle bundle) { 
     super.onCreate(bundle); 
     FrameLayout framelayout = new FrameLayout(getContext()); 
     framelayout.setBackgroundColor(0); 
     setContentView(framelayout); 
    } 
} 
} 

super(activity、R.style.AppTheme)にエラーが見つかる可能性があります。この行あなたは単にあなたのアプリのテーマを与える必要があります。

次に、ロック画面のonCreateメソッドでオブジェクトを作成する必要があります。ロック機能を呼び出します。例えば:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // Object of Class HomeKeyLocker. 
    mHomeKeyLocker = new HomeKeyLocker(); 
    setContentView(R.layout.yourActivityLayoutName); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
    // Calling Function in Class HomeKeyLocker to Block Home Button on this Activity. 
    mHomeKeyLocker.lock(this); 
} 
1

シャーク氏によると、あなたのアクティビティでは、のOnKeyDownを無効にする必要があります。 &以下のコードをあなたの活動にコピーしてください。

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     // TODO Auto-generated method stub 

     if((keyCode==KeyEvent.KEYCODE_HOME) 
     { 
      // *** DO YOUR STUFF HERE *** 
      return true; 
     } 
      else 
      return super.onKeyDown(keyCode, event); 
    } 

ホームボタンをクリックすると処理されます。

関連する問題