2010-01-17 23 views
20

Khi tạo một ý định rất MyActivity rằng phản ứng với một người dùng nhấn Home-nút rất dễ dàng bằng cách sử dụng ngữ đánh dấu XML:Ghi đè nút Trang chủ - làm cách nào để loại bỏ lựa chọn?

<intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
      <category android:name="android.intent.category.HOME" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 

Tôi muốn biết làm thế nào để tránh bị lựa chọn "những gì hoạt động nào bạn muốn sử dụng "cho Màn hình chính? HTC đã thực hiện "Touch Flo" (Sense) của nó ghi đè lên hoạt động "bắt đầu" mặc định và tôi không bao giờ nhận được câu hỏi nếu tôi muốn sử dụng "Bắt đầu" hoặc "TouchFlo" thường. Tuy nhiên, khi tôi thêm Hoạt động của riêng mình, tôi luôn nhận được câu hỏi.

Có, tôi biết rằng tôi có thể chọn hộp kiểm "Sử dụng tiêu chuẩn này làm chuẩn", nhưng đó không phải là điều tôi muốn ngay bây giờ. Vì vậy, câu hỏi là: tôi có thể làm cho hệ thống ghi đè mọi thứ khác và luôn luôn sử dụng MyActivity như mặc định?

Tiếp theo, tôi thực sự chỉ muốn ghi đè Màn hình chính thông thường khi ứng dụng của tôi đang chạy. Nếu nó không chạy, mọi thứ sẽ hoạt động như bình thường, tức là MyActivity KHÔNG được kết hợp với nút Home.

Bất kỳ ý tưởng nào cũng tuyệt vời.

+3

Lý do duy nhất bạn không nhận được hộp thoại chọn hoạt động khi bạn nhấn nhà trên một thiết bị HTC là vì họ' đã cài đặt sẵn nó với quyết định đó. Bạn có thể thấy rằng HTC phải chịu cùng một bộ chọn Hoạt động bằng cách đi tới Ứng dụng> TouchFLO> Xóa mặc định, sau đó nhấn Home. Bạn sẽ được nhắc sử dụng màn hình chính của HTC hoặc màn hình Android gốc. –

+0

Ok, vì vậy chúng tôi sắp xếp bị mắc kẹt với ALWAYS ghi đè lên màn hình chính mặc định hoặc không ghi đè nút nào cả ... = ( – Ted

Trả lời

28

Bạn không thể ghi đè vĩnh viễn nút Trang chủ mà không cần người dùng xác nhận.

Một đối số cho lý do tại sao trường hợp này là trường hợp bảo mật. Nút Home là cách duy nhất để người dùng có thể được đảm bảo thoát khỏi bất kỳ ứng dụng nào. Nếu bạn có thể làm cho nút Home khởi chạy ứng dụng của bạn thay vì Màn hình chính mà không có người dùng xác nhận thay đổi này, thì sẽ rất dễ dàng để viết một ứng dụng độc hại tấn công vào điện thoại của người dùng.

Hoặc, ứng dụng của bạn có thể chứa Màn hình chính lặp lại thu thập chi tiết tài khoản Google của người dùng; không phải là khó vì nguồn có sẵn. Nếu ứng dụng của bạn có thể âm thầm thay thế Màn hình chính mặc định, sẽ khó cho người dùng biết điều này đã xảy ra.

Ngoài ra, bạn có thực sự muốn ghi đè Trang chủ không? Trang chủ giống như một nút thoát khẩn cấp. Nhấn Home hai lần sẽ luôn đưa người dùng quay lại bảng điều khiển trung tâm của Màn hình chính, vì vậy bất kỳ ứng dụng nào họ đang chạy, thật dễ dàng để người dùng quay lại nơi họ biết. Bạn không nên thực sự ghi đè điều này trừ khi bạn đang sản xuất một thay thế Nhà đầy đủ.

+1

Thx cho câu trả lời. Ứng dụng của tôi không phải là ứng dụng thông thường cho mọi người. Trong ứng dụng này, chúng tôi sử dụng các ứng dụng bên ngoài khác mà chúng tôi muốn "tích hợp" mà làm phức tạp hơn nữa. Chúng tôi cần để có thể đi đến ứng dụng bên ngoài này (phần mềm nav) Và sau đó trở lại chương trình của chúng tôi "liền mạch". Kể từ khi ứng dụng nav là toàn màn hình, chúng ta cần phải ghi đè lên một nút phần cứng để có thể quay trở lại ứng dụng chính của chúng tôi, do đó câu hỏi. ứng dụng có vẻ như ... – Ted

+0

Tôi thực sự muốn có một "tiêu đề" trên đầu trang trong phần mềm nac, nhưng điều đó không làm việc vì vậy tôi cần một nút. HOME-nút là sự lựa chọn tự nhiên vì điều đó sẽ đưa người dùng trở lại "hoạt động chính "của ứng dụng ... – Ted

+2

Tôi không biết bạn làm việc cho ai, nhưng dựa trên tất cả các câu hỏi của bạn ở đây trên StackOverflow, trước đây tôi đã làm việc trên một sản phẩm tương tự ridiculously bao gồm tất cả các yêu cầu khóa xuống và những gì không. Nếu bạn muốn triển khai loại giải pháp tích hợp đầy đủ này trên Android, bạn sẽ phải tự sửa đổi nền tảng Android và cung cấp một hình ảnh tùy chỉnh mà bạn cần phải flash cho từng thiết bị. –

1

Vâng, người dùng sẽ vẫn phải chọn nhà thông thường làm nhà của họ với việc sử dụng làm mặc định được chọn để dừng lời nhắc quay lại. Tuy nhiên, tôi tin rằng bạn có thể chỉnh sửa cài đặt hệ thống theo cách nào đó để tình cờ hoạt động cụ thể của bạn được coi là ngôi nhà mặc định, như vậy nhà báo sẽ không làm gì hoặc bị khóa cho người dùng ở hoạt động chính, và tôi hiểu rằng bạn muốn khởi chạy người dùng của mình vào các hoạt động khác từ đó, mang lại cho họ thông tin báo chí nhanh về nhà cho Trình khởi chạy gốc này. Tôi có thể thấy lợi ích của việc này hoàn toàn và thậm chí nó có thể mang lại lợi ích cho những gì tôi đang phát triển nếu tôi chọn triển khai nhiều màn hình tiện ích mà người dùng có thể lật sang trái hoặc phải giữa.

Có ít nhất 1 ứng dụng trên mạng mà tôi đã tải xuống có vẻ như đang thực hiện chính xác việc này. Khi người dùng thoát khỏi ứng dụng, nó sẽ khôi phục tùy chọn nhà mặc định thông thường của người dùng. Ứng dụng hướng dẫn người dùng rất rõ ràng để chọn Trình khởi chạy làm nhà mặc định của họ và không bao giờ làm điều đó với chính ứng dụng. Nó có một vài phương thức "thoát" khác nhau, cho phép người dùng lựa chọn nhà để trở về nếu họ có nhiều, và một trong đó chỉ cần thoát ra để mặc định thường xuyên của họ.

Tôi cũng đang nghiên cứu vấn đề này và sẽ báo cáo lại với tiến trình & nguồn.

5
@Override 
public void onAttachedToWindow() 
{ 
    Log.i("TESTE", "onAttachedToWindow"); 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 
    super.onAttachedToWindow(); 
} 

Với phương thức này, nút HOME ngừng hoạt động trong hoạt động này (chỉ hoạt động này). Sau đó, bạn chỉ cần thực hiện lại vì nó là một sự kiện nút bình thường (ví dụ như nút quay lại).

public boolean onKeyDown(int keyCode, KeyEvent event) { 
if (keyCode == KeyEvent.KEYCODE_HOME) { 
    Log.i("TESTE", "BOTAO HOME"); 
    return true; 
} 
return super.onKeyDown(keyCode, event);  
} 
+24

Không hoạt động với ICS (nó hoạt động ở đâu?) - E/AndroidRuntime (5594): java.lang.IllegalArgumentException: Loại cửa sổ không thể thay đổi sau khi cửa sổ được thêm vào. –

0

Sử dụng onUserLeaveHint()

onUserLeaveHint() là một phương pháp bảo vệ như các phương pháp vòng đời khác của hoạt động này và nếu bạn đang xử lý onUserLeaveHint này sẽ chăm sóc các trường hợp sau đây

  1. Khi Người dùng truy cập vào phím chủ
  2. Khi người dùng truy cập lại khóa
  3. Khi người dùng truy cập thanh thông báo

Tại đây bạn có thể bắt nút Homeb.

Goodluck. :)

+0

ví dụ ở đâu? –

0

OnUserLeaveHint() có thể bắt người dùng nhấn nút trang chủ.

Đã có kể từ mức API 3.

@Override 
protected void onUserLeaveHint() { 
    super.onUserLeaveHint(); 
    /* 
    * Called as part of the activity lifecycle when an activity is about to go into the background 
    * as the result of user choice. For example, when the user presses the Home key, onUserLeaveHint() will be called, 
    * but when an incoming phone call causes the in-call Activity to be automatically brought to the foreground, 
    * onUserLeaveHint() will not be called on the activity being interrupted. 
    * In cases when it is invoked, this method is called right before the activity's onPause() callback. 
    */ 
} 

Nguồn: https://developer.android.com/reference/android/app/Activity.html#onUserLeaveHint()

Các vấn đề liên quan