2012-07-03 41 views
8

Tôi đang nghiên cứu một dự án nghiên cứu cho trường đại học của mình. Ứng dụng sẽ không bao giờ được đưa ra thị trường và chỉ được sử dụng cho nghiên cứu.Tắt nút Trang chủ trong ứng dụng Màn hình chính?

Tôi đã tạo một ứng dụng màn hình chính bằng cách sử dụng mã mẫu Google Màn hình chính. Ở đó, tôi đã thực hiện một hoạt động là một màn hình khóa. Khi ở trong đó, người dùng không thể thoát ra khỏi khóa bằng cách nhấn Home, Back, vv Nút Back có vẻ bị tắt, nhưng Home-Button thì không. Tôi đã thử một số giải pháp từ internet và stackoverflow, tất cả đều không hoạt động.

Đây là mã quan trọng:

(Thông báo: Logcat lãm "Nút nhấn: 4"! Cho Back-Button nhưng không cho nút home)

Trong Hoạt động Lock-Screen của tôi :

@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(); 
    } 

Nó có vẻ như các onAttachedToWindow() Phương pháp không hoạt động kể từ Android phiên bản 4. Làm thế nào tôi có thể vô hiệu hóa các homebutton?

EDIT: Manifest file:

<?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> 
+0

http://stackoverflow.com/questions/3898876/how-to -disable-the-home-key/8889913 # 8889913 – user370305

+1

Điều này dường như chỉ đến chính xác điều tôi đã đăng? Hoặc tôi đang thiếu điểm bạn đang cố gắng thực hiện? – hamena314

+0

Bạn đã thử [one?] Này (http://stackoverflow.com/questions/10025660/override-home-and-back-button-is-case-a-boolean-is-true/10025904#10025904) –

Trả lời

5

Điều này có thể đến muộn một chút, tôi đã ở trong tình huống tương tự. Vấn đề của tôi là tôi không muốn người dùng rời khỏi màn hình cuộc gọi trong khi gọi điện thoại nhưng tôi không thể ngăn chặn nó, vì vậy thay vào đó tôi chỉ đơn giản là đưa nó trở lại trước mỗi khi họ rời khỏi nó.

Trong trường hợp của bạn, bạn chỉ đơn giản là có thể mang lại ứng dụng của bạn sau ra trước khi tạm dừng:

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

Vì vậy, để lại sẽ tự động mở ứng dụng một lần nữa. Bạn nên thử mở lại hoạt động của bạn hoặc đưa nó lên phía trước và xem những gì hoạt động tốt nhất. Mở lại có thể không đáng kể nếu bạn xóa tất cả hoạt ảnh và thêm FLAG_ACTIVITY_NO_ANIMATION.

1

này là không thể mà không thay đổi mã nguồn Android: [Đề cập ở đây] [1].

Điều này cũng sẽ phá vỡ chu kỳ hoạt động Android, không được khuyến nghị.

+0

-1, Điều này câu hỏi là cho lockscreen, không phải là một ứng dụng thông thường. – Matsemann

+0

Trong phiên bản đầu của mã, chương trình chỉ là một hoạt động duy nhất. Tôi đã có thể trỏ nút trang chủ đến hoạt động của chính nó và do đó chỉ sử dụng nó cho mục đích này. Có lẽ có một con đường xung quanh? – hamena314

2

Dường như nút Home Button không được chuyển tiếp đến ứng dụng trong ứng dụng màn hình chính. Vì vậy, tôi đã tạo ra một ứng dụng bình thường, đặt BroadcastReceiver và dịch vụ của tôi vào và bây giờ tôi có thể vô hiệu hóa homebutton và backbutton.

Vẫn có thể sử dụng nút Ứng dụng gần đây để thoát khỏi màn hình khóa của tôi. Bạn có thể tràn ngập nó với các mục giả có thể hoạt động.

Hy vọng rằng sẽ giúp ai đó!

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

Và bây giờ xử lý các sự kiện quan trọng như thế này,

@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; 
} 
1

mã này làm việc trong ứng dụng của tôi

@Override 
public void onAttachedToWindow() { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 
    super.onAttachedToWindow(); 
} 
Các vấn đề liên quan