2011-12-22 24 views
52

Tôi đang phát triển một ứng dụng Android bằng Jquery Mobile/Phonegap. Tôi có mã sau đây để điều khiển nút quay lại của điện thoại:Phonegap Android Back Button - đóng ứng dụng với nút quay lại trên trang chủ

document.addEventListener("backbutton", backKeyDown, true); 


function backKeyDown() { 
    // Call my back key code here. 
    $.mobile.changePage("#homepage", "slideup"); 
} 

Tất cả đều hoạt động tốt, nhưng tôi muốn ứng dụng đóng khi nhấn nút quay lại trên trang chủ, điều này có khả thi không?

+0

lớp công khai MainActivity mở rộng Hoạt động { – Android

Trả lời

120

Cập nhật: này đã ngừng làm việc với một bản cập nhật PhoneGap mới nhất (được cho là). Vui lòng cung cấp giải pháp làm việc nếu bạn biết.


Đây là cách tôi làm điều đó:

document.addEventListener("backbutton", function(e){ 
    if($.mobile.activePage.is('#homepage')){ 
     /* 
     Event preventDefault/stopPropagation not required as adding backbutton 
      listener itself override the default behaviour. Refer below PhoneGap link. 
     */ 
     //e.preventDefault(); 
     navigator.app.exitApp(); 
    } 
    else { 
     navigator.app.backHistory() 
    } 
}, false); 

Để biết thêm thông tin, ở đây bạn có thể tìm thấy những tài liệu có liên quan với một ví dụ đầy đủ: http://docs.phonegap.com/en/2.0.0/cordova_events_events.md.html#backbutton

+2

Đỉnh cao - cổ vũ Spadar – Dancer

+4

Tại sao bạn sử dụng 'e.preventDefault()'? –

+1

e.preventDefault được sử dụng để hủy hành động mặc định của sự kiện, trong trường hợp này là backHistory(), (nói cách khác, để ngăn chặn hành động mặc định sẽ không được kích hoạt). –

9

Bạn cần phải theo dõi thời điểm trang chủ được hiển thị. Khi biết bạn đang ở trên trang web của cuộc gọi:

navigator.app.exitApp(); 
+0

Tài liệu phonegap cho navigator.app.exitApp() [và các tiện ích navigator.app khác] ở đâu? Tôi không thể tìm thấy nó tại http://docs.phonegap.com/en/2.2.0/index.html –

+0

Nó không được ghi nhận vì nó không phải là nền tảng chéo. Nếu bạn muốn tìm hiểu những gì có sẵn cho Android sau đó mở cordova.js trong trình soạn thảo văn bản của bạn và tìm kiếm "cordova/plugin/android/app". Thực tế, có một vài nhận xét hay trong mã có thể giúp bạn tìm ra những gì đang diễn ra. –

+0

Cảm ơn Simon - sẽ kiểm tra. –

12
document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
    document.addEventListener("backbutton", onBackKeyDown, false); 
} 
function onBackKeyDown() 
{ 
navigator.app.exitApp(); 
} 

Cảm ơn bạn Spader.

+1

có cần thiết phải quấn nút nghe ngược vào trong một người nghe deviceready như được hiển thị ở đây không? Tôi đã nhìn thấy các giải pháp 'backbutton' mô tả nhiều lần ở những nơi khác nhau (bao gồm cả nơi khác trên stackoverflow) và không ai cho thấy nó đặc biệt bọc như bạn có ở đây. Sẽ tốt nếu ai đó có thể làm rõ –

1

Nếu bạn không muốn sử dụng jQuery Mobile, thay đổi $.mobile.activePage.is('#homepage')-document.getElementById('#homepage') trên @Spadar Shut câu trả lời, như trên đoạn mã sau:

document.addEventListener("deviceready", onDeviceReady, false); 

    function onDeviceReady(){ 
     document.addEventListener("backbutton", function(e){ 
      if(document.getElementById('#homepage')){ 
       e.preventDefault(); 
       navigator.app.exitApp(); 
      } 
      else { 
       navigator.app.backHistory() 
      } 
     }, false); 
    } 

Qua cách này, không cần phải tải về Jquery Mobile gibberish chỉ cho mục đích này. Also, activePage is deprecated as of JQuery mobile 1.4.0 và sẽ bị xóa khỏi 1.5.0. (Use the getActivePage() method from the pagecontainer widget instead)

+0

Làm cách nào để đặt trang chủ thành index.html của tôi? ví dụ: document.getElementById ('# homepage') không hoạt động. – Zac

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