2011-06-17 21 views
7

Vì lý do phức tạp, tôi cần có thể hoàn thành() các hoạt động của mình khi người dùng nhấn nút HOME.Cách kết thúc() một Hoạt động khi nút Home được nhấn

Câu chuyện ở đây là tôi có tiện ích màn hình chính khởi chạy một phần khác của ứng dụng có hoạt động hoàn toàn trong suốt (vì vậy màn hình chính tiếp tục hiển thị mặc dù hoạt động của tôi đang chạy). Nếu các hoạt động trước đó đã bị chấm dứt thông qua nút Home, chúng sẽ được đưa vào nền trước và làm mờ màn hình chính.

Hoặc thay thế, tôi có thể có hoạt động mới bằng cách nào đó buộc kết thúc() hoạt động trước đó không?

+0

Tôi khuyên bạn nên loại bỏ các hoạt động minh bạch, vì vậy mọi người sẽ không bị cám dỗ để đề cập đến ứng dụng của bạn như phần mềm gián điệp. – CommonsWare

+0

Cảm ơn Mark; có một lý do chính đáng cho hoạt động minh bạch này. Tôi hiển thị hình động trên widget màn hình của tôi trong thời gian ngắn của hoạt động trong suốt (nó tự hủy sau 6 giây) và tôi không muốn người dùng mở ứng dụng khác, vì vậy điều này cũng phục vụ để "khóa" màn hình chính; nó cũng phải là một hoạt động vì tôi phải thực hiện một số cuộc gọi chỉ có sẵn trên chuỗi giao diện người dùng. – Yossi

+1

"Tôi không muốn người dùng mở ứng dụng khác" - tại sao điều này lại tốt cho người dùng? "nó cũng phải là một hoạt động vì tôi phải thực hiện một số cuộc gọi chỉ có sẵn trên chuỗi giao diện người dùng." -- nhu la? Các cuộc gọi duy nhất mà tôi có thể nghĩ đến liên quan đến các hoạt động và tiện ích của chính họ. – CommonsWare

Trả lời

8

gì về

android:launchMode="singleTask" 

hoặc

android:launchMode="singleInstance" 

trong biểu hiện của bạn? Tôi nghĩ rằng singleTask là một trong những bạn muốn, nhưng im vẫn không tinh thể rõ ràng về những gì bạn đang làm.

"Hệ thống tạo hoạt động ở gốc của một nhiệm vụ mới và định hướng mục đích đến nó. Tuy nhiên, nếu một cá thể của hoạt động đã tồn tại, hệ thống sẽ định tuyến mục đích đến cá thể hiện có thông qua cuộc gọi đến onNewIntent (), thay vì tạo một phương thức mới. " singleTask

@Override 
void onPause() { 
    super.onPause(); 
    finish(); 
} 

dev docs: Acitvity Lifecycle , Finish

+0

Cảm ơn - nhưng điều này cũng sẽ kết thúc hoạt động của tôi khi tôi sinh ra một hoạt động con - vì vậy tôi sẽ cần phải duy trì một lá cờ cho bất cứ khi nào tôi sinh ra con hoạt động - clunky. – Yossi

+2

Làm việc nó ra !!! Câu trả lời này là gần nhất, vì vậy tôi sẽ chấp nhận nó. Tôi đã thêm một kết thúc() vào [onUserLeaveHint] (http://developer.android.com/reference/android/app/Activity.html#onUserLeaveHint()) và đảm bảo rằng tất cả các cuộc gọi đến startActivity từ hoạt động này đều có cờ ** Intent.FLAG_ACTIVITY_NO_USER_ACTION ** để ** onUserLeaveHint() ** chỉ được gọi khi người dùng thực sự rời khỏi hoạt động của tôi. Những kẻ nền tảng Android này nghĩ về mọi thứ! – Yossi

+0

haha ​​cảm ơn vì đã chấp nhận, vui mừng được loại hữu ích :) –

0

Không chắc về kết thúc() trên nút home bấm nhưng tôi nghĩ rằng bạn có thể kết thúc() hoạt động trước đây sử dụng:

Intent i = new Intent(MainActivity.this, SecondActivity.class); 
startActivity(i); 
finish(); 

Có lẽ không phải là cách tốt nhất để làm việc đó mặc dù. Tôi nghĩ bạn cũng có thể gọi hoạt động phụ huynh của một subactivity và kết thúc nó theo cách đó nhưng không chắc chắn.

+0

Điều này sẽ kết thúc hoạt động mà bạn đã viết dòng mã 'finish();'. @ Yossi, có lẽ gửi một ý định mà bạn có thể giải thích có nghĩa là đã đến lúc gọi xong. Chỉ cần suy nghĩ to. – eternalmatt

+0

Gửi một ý định khiến tôi suy nghĩ! Điều gì nếu pendingIntent được sử dụng bởi widget của tôi bao gồm các lá cờ được tham chiếu trong [link] (http://stackoverflow.com/questions/5979171/clear-all-activities-in-a-task/5979351#5979351) - có thể thổi đi các hoạt động kéo dài. Tôi sẽ thử nó. – Yossi

+0

Không hoạt động - bởi vì các cờ trong liên kết yêu cầu API 11 - làm cho điều này vô dụng đối với 99% thiết bị trên thị trường hiện nay ... – Yossi

0

tôi đã có vấn đề với đóng âm thanh trên nút home được nhấn. Tôi đã làm mã này dưới đây. Hy vọng nó sẽ giúp bạn. Ghi đè phương thức onpause().

@Override 
public void onPause(){ 
     System.exit(0); 
     super.onPause(); 
} 
+1

Cảm ơn ... Tôi sẽ quan tâm đến việc sử dụng các cuộc gọi khuôn khổ không phải của Android. Điều gì xảy ra nếu nó thổi đi một thứ gì đó (chẳng hạn như con trỏ tệp) vẫn cần thiết cho việc tắt Ứng dụng của tôi? – Yossi

3

Đặt android: clearTaskOnlaunch = "true" trên hoạt động được khởi chạy từ màn hình chính. Ví dụ:

<activity 
 
      android:name="MainActivity" 
 
      android:exported="true" 
 
      android:clearTaskOnLaunch="true" 
 
      android:label="@string/app_name" 
 
      android:screenOrientation="portrait" > 
 
      <intent-filter> 
 
       <action android:name="android.intent.action.MAIN" /> 
 

 
       <category android:name="android.intent.category.LAUNCHER" /> 
 
      </intent-filter> 
 
     </activity>

+0

Vui lòng không gửi spam trang web có liên kết youtube không liên quan. – laalto

+0

ok. cam ơn bạn .. –

0
@Override 
public void onStop() { 
    super.onDestroy(); 
} 
Các vấn đề liên quan