2010-08-03 34 views
11

Tôi có dịch vụ và hành vi của dịch vụ phải thay đổi khi thay đổi Hoạt động trên cùng. Nói, Hoạt động A hoạt động và sau đó dịch vụ bắt đầu một số loại xử lý. Quá trình xử lý này phải dừng khi Activity A không còn hiển thị: người dùng nhấn "Quay lại", "Trang chủ" hoặc đã làm bất kỳ điều gì khác khiến cho Hoạt động A ẩn đi. Hoạt động A này không được nhận thức về dịch vụ - nghĩa là nó không phải thông báo rõ ràng cho Dịch vụ rằng nó sẽ biến mất.Làm cách nào để nhận được bất kỳ số nhận dạng nào của hoạt động trên cùng?

Trong Tóm lại, là có một cách để:

  • Nhận bất kỳ loại xác định (tham chiếu đối tượng, tên lớp, ID, vv) của Hoạt động trên cùng,
  • Nhận thông báo khi Hoạt động trên cùng thay đổi?

P.S. Điều này nghe có vẻ giống như hành vi phần mềm độc hại, nhưng nó không phải là! Đó là trường hợp sử dụng hợp pháp!

Chỉnh sửa: Các hoạt động không có trong đơn đăng ký của tôi. Chúng có thể chỉ là về mọi thứ - trình duyệt, ứng dụng bản đồ, cài đặt, v.v.

Trả lời

21

Phần trên cùng này đã lỗi thời. Xem phần dưới để biết câu trả lời.

Tôi giả sử bạn đang đề cập đến hoạt động trong phạm vi ứng dụng của riêng bạn:

Tất cả các hoạt động gọi onResume() khi đến với foreground và onPause() khi rời khỏi tiền cảnh. Chỉ cần ghi đè phương thức này bằng chức năng của bạn (hãy nhớ gọi số super.onResume()super.onPause() tương ứng!). Đối với số nhận dạng, có lẽ bạn có thể làm cho Dịch vụ của bạn có phương thức tĩnh được gọi là Hoạt động đến nền trước (trong onResume()), cung cấp tham chiếu đến chính nó, lớp của nó, một số ID tùy ý, v.v.

tham khảo: http://developer.android.com/reference/android/app/Activity.html


Edit:

Bạn có thể truy cập vào danh tính hoạt động hàng đầu của qua ActivityManager -> nhiệm vụ đang chạy ->ComponentName. Hãy chắc chắn khai báo <uses-permission android:name="android.permission.GET_TASKS" /> trong tệp kê khai của bạn.

Context context = someArbitraryContext; 
ActivityManager am = (ActivityManager) context. 
    getSystemService(Activity.ACTIVITY_SERVICE); 
String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName(); 
String className = am.getRunningTasks(1).get(0).topActivity.getClassName(); 

Để nhận được thông báo, có thể bạn sẽ chỉ cần kiểm tra Hoạt động hàng đầu sau mỗi mili giây.

+0

Không, các hoạt động tôi đề cập đến có thể chỉ là về mọi thứ, không nhất thiết phải có trong đơn đăng ký của riêng tôi. onResume() và onPause() sẽ hữu ích nếu nó là Hoạt động của riêng tôi. –

+0

Tìm thấy câu trả lời của bạn (một phần) và chỉnh sửa bài đăng của tôi. –

+0

Tuyệt vời! Sẽ xem như thế nào/nếu nó hoạt động! –

1

Tạo một baseActivity và mở rộng tất cả các hoạt động khác từ baseActivity, trong onResume lưu Hoạt động hiện tại trong một public static Filed trong một lớp học toàn cầu (trong trường hợp của tôi mở rộng Application)

public class baseActivity extends Activity { 
    @Override 
    protected void onResume() { 
     super.onResume(); 
     Global.Activity = this; 
    } 
} 

Các hoạt động khác

public class mainActivity extends baseActivity { 
     // You Can Use Global.Activity Everywhere ! , Even in a Object Extended Class 
    } 
Các vấn đề liên quan