2012-02-11 34 views

Trả lời

-1

nếu người nhận của bạn được đăng ký trong AndroidManifest thì có, ứng dụng của bạn sẽ vẫn nhận được. Mặt khác, nếu bạn đăng ký qua mã (trong dịch vụ/hoạt động), thì ứng dụng sẽ không nhận được mã số

+0

Điều này dường như không còn là trường hợp của 3.1. Xem câu trả lời của @ CommonsWare bên dưới. –

+0

đó là câu trả lời ngu ngốc .. tại sao chấp nhận điều này .. –

+0

@ZalaJanaksinh nó không phải là "ngu ngốc" thời gian nó được trả lời - chỉ khi bạn biết lịch sử android :) – waqaslam

26

Tôi có nhận được các bộ thu phát sóng đã đăng ký sau khi tôi dừng ứng dụng không?

Trên Android 3.1+, no. Khi người dùng đã buộc dừng ứng dụng của bạn, bạn sẽ không nhận được bất kỳ phát sóng nào Intents, dưới mọi hình thức, cho đến khi người dùng bắt đầu thủ công một trong các hoạt động của bạn.

+0

Bạn có biết liệu có cách giải quyết nào cho vấn đề này không? –

+3

@MikeT: Để người dùng bắt đầu thủ công một trong các hoạt động của bạn * là * giải pháp thay thế ". – CommonsWare

+0

Ok, tốt để biết! Nhưng tại sao? Để cung cấp cho người dùng quyền kiểm soát nhiều hơn đối với các ứng dụng? Ngoài ra, tôi tự hỏi: làm các ứng dụng taskmanager này cũng gọi đây là lực dừng khi giải phóng bộ nhớ?Hay họ sử dụng ít cách xâm nhập để giết một quá trình? – Peterdk

1

Bạn không nên thêm FLAG_INCLUDE_STOPPED_PACKAGES vào ý định của người nhận bắt đầu hoạt động hoặc dịch vụ của bạn. Bạn phải thêm nó vào mục đích mà bạn sử dụng cho sendBroadcast. Có nghĩa là, bạn cần phải thêm nó vào mục đích trong ứng dụng gọi Broadcast.

Đây là cách bạn nên kích hoạt máy thu của bạn từ một ứng dụng khác:

 Intent intent = new Intent("com.xxx.my_filter_intent"); 
     intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); 
     this.sendBroadcast(intent); 

Nếu bạn không có kiểm soát trên truyền hình này (ví dụ nếu nó là một phát sóng hệ thống) và không có lá cờ như vậy bên trong - sau đó ứng dụng của bạn sẽ không được kích hoạt bởi chương trình phát này nếu nó đang ở trạng thái dừng cưỡng bức.

đọc thêm ở đây: http://developer.android.com/about/versions/android-3.1.html#launchcontrols

0

sử dụng phương pháp của tôi nếu bạn muốn bắt đầu một ứng dụng ẩn cho thời gian chỉ đầu tiên tôi thực hiện một hoạt động Launcher minh bạch như thế này

<activity android:name=".MainActivity" 
android:label="@string/app_name" 
android:theme="@style/Theme.Transparent" 
android:excludeFromRecents="true" 
> 
<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 

Vì vậy, tôi làm ứng dụng ẩn trong trình khởi chạy bằng cách đặt mã này vào oncreat()

PackageManager p = getPackageManager(); 
ComponentName componentName = new ComponentName(this, MainActivity.class); 
p.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 

Vì vậy, tôi sử dụng mã này cho biểu tượng chương trình ứng dụng trên launcher và làm cho nó chạy thể trên lớp dịch vụ có sử dụng khởi động quảng bá thu và kết nối mạng lớp broadcast receiver quá (autostart.java và networkConnectinCheck.java):

PackageManager p = context.getPackageManager(); 
ComponentName componentName = new ComponentName(context, MainActivity.class); 
p.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 

Bây giờ tôi có thể chạy ứng dụng lần đầu tiên bằng tay người dùng và sau đó tôi sử dụng ứng dụng của người nhận vào ứng dụng ăn trưa bất cứ lúc nào.

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