web-dev-qa-db-ja.com

ホームキーを無効にする方法

画面をロックしたいのですが。ホームキーを無効にし、バックキーのみを使用したい。どうすればこれを達成できますか?

34
pengwang

このメソッドを使用して、Androidのホームキーを無効にします

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

HOMEキーに取り組む方法を見つけました。アプリケーションでは、マニフェストを次のように設定します

<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"/>

これで、アプリケーションは代替ランチャーアプリケーションになりました。

Adbを使用し、パッケージマネージャーを使用してランチャーアプリケーションを無効にします

pm disable com.Android.launcher2

これで、ホームキーを押すと常に同じ画面が表示されます。

23
amiekuser

このソリューションは、最大3.xでのみ機能します。

さて、これは難しい質問でした。しかし、ここにそれをクラックする方法があります。

アクティビティで以下のメソッドをオーバーライドし、

@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;
}
13
Andro Selva

このコードをMainActivityクラスに追加します。

Timer timer;
MyTimerTask myTimerTask;

@Override
protected void onResume() {
    super.onResume();

    if (timer != null) {
        timer.cancel();
        timer = null;
    }
}

@Override
protected void onPause()
{
    if (timer == null) {
        myTimerTask = new MyTimerTask();
        timer = new Timer();
        timer.schedule(myTimerTask, 100, 100);
    }

    super.onPause();
}

private void bringApplicationToFront()
{
    KeyguardManager myKeyManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
    if( myKeyManager.inKeyguardRestrictedInputMode())
        return;

    Log.d("TAG", "====Bringging Application to Front====");

    Intent notificationIntent = new Intent(this, MainActivity.class);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    try
    {
        pendingIntent.send();
    }
    catch (PendingIntent.CanceledException e)
    {
        e.printStackTrace();
    }
}

public void onBackPressed() {
    // do not call super onBackPressed.
}

class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        bringApplicationToFront();
    }
}

「ホーム」ボタンのロックではありませんが、ユーザーは長時間(100ミリ秒以上)別のアプリに切り替えることはできません。おそらくこれがあなたの望みです。

8
Stas BZ

ホームボタンを無効にするには、これを試してください:

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

プルダウンされた通知バーの問題は、次のように通知バーを非表示にすることで解決できます。

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.xxxx);
    getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN);
    ....
}

または、マニフェストでアクティビティまたはアプリケーションのフルスクリーンテーマを設定します。

Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen"
1
Alex