6

Tôi có nhiệm vụ nền mà tôi muốn xử lý. Vấn đề là khi tác vụ hoàn thành, tôi muốn gọi một Hoạt động mới để hiển thị kết quả cho người dùng, chỉ khi Hoạt động chính của tôi hiển thị, nếu không tôi chỉ muốn gửi thông báo để người dùng có thể thấy hành động đó đã hoàn thành và có thể mở nó bất cứ khi nào anh ấy thích.Chỉ hiển thị thông báo nếu Hoạt động không hiển thị

Tôi đã nghĩ đến việc sử dụng dịch vụ để bắt đầu và chấm dứt tác vụ nền và phát thông báo khi hoàn thành, nhưng trong trường hợp này, tôi không có tùy chọn để biết Hoạt động đã được hiển thị hay chương trình phát sóng chưa được xử lý và tôi nên gửi thông báo.

Vì vậy, đây là vấn đề của tôi và vì kiến ​​thức và kinh nghiệm của tôi trong các nhiệm vụ và dịch vụ cơ bản bị hạn chế nên tôi đã quyết định yêu cầu trợ giúp.

Cảm ơn trước vì đã đọc trường hợp của tôi, hy vọng sẽ được trợ giúp!

Trả lời

23

Dưới đây là một bài viết hay mô tả cách triển khai những gì bạn muốn: Activity or Notification via Ordered Broadcast.

Ý tưởng chính là sử dụng chương trình phát sóng theo thứ tự. Bạn nên tạo một BroadcastReceiver mà sẽ sống mà không có bất kỳ hoạt động nào. Để làm điều đó, bạn nên khai báo nó trong tệp AndroidManifest.xml. Người nhận này sẽ hiển thị Notification. Ngoài ra, bạn nên đăng ký một số BroadcastReceiver khác với mức độ ưu tiên cao hơn trong hoạt động chính của bạn sẽ hiển thị nội dung nào đó trên màn hình. Sau đó, bạn chỉ cần gửi một chương trình phát sóng theo thứ tự.

+0

Đó là câu trả lời có thể xảy ra mà tôi đã phát hiện ra sau khi đăng câu hỏi và có vẻ thực sự tốt. Liên kết thực sự hữu ích, cảm ơn rất nhiều. Tôi nghĩ rằng đây là cách tôi sẽ làm theo! – akalipetis

+3

siêu thanh lịch và hoạt động tốt! – Orr

+0

@Antonis: Bạn có thể vui lòng cung cấp mã cho chúng tôi thực hiện điều này không? – Sam

2

Hãy thử như thế này.

private static boolean isInForeground; 

onResume(){ 
    isInForground = true; 
} 
onPause(){ 
    isInForground = false; 
} 

nếu isInForground là true thì hoạt động ở mục Forground (Hiển thị) nếu không hiển thị.

nếu bạn muốn biết từ bất kỳ đâu rồi thêm thông tin sau vào MainActivity.

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

    onResume(){ 
     pref = PreferenceManager.getDefaultSharedPreferences(this); 
     prefEditor = prefs.edit(); 
     prefEditor.putBoolean("isInForeground",true); 
     prefEditor.commit(); 
    } 

    onPause(){ 
      pref = PreferenceManager.getDefaultSharedPreferences(this); 
      prefEditor = prefs.edit(); 
      prefEditor.putBoolean("isInForeground", false); 
      prefEditor.commit(); 
    } 

Sau đó, từ dịch vụ của bạn.

pref = PreferenceManager.getDefaultSharedPreferences(this); 
if(pref.getBoolean("isInForeground", false)){ 
     //MainActivity is in forground 

} 
else{ 
     //not in forground 
} 
1

Có vẻ như bạn muốn triển khai tác vụ trong chuỗi từ một Dịch vụ. Bạn có thể có một boolean tĩnh liên tục trong Activity cho biết liệu hoạt động có được hiển thị hay không. Một hoạt động hiển thị với người dùng trong onResume() và không hiển thị bất cứ khi nào onPause() được gọi. Đặt boolean thành true trong onResume() và false trong onPause().

0

bạn có thể sử dụng SharedPreferences; cập nhật tùy chọn trên một hoạt động khi nó là onStart() hoặc onStop() và chỉ xác minh nó trong dịch vụ của bạn.

Hy vọng tôi sẽ giúp bạn.

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