2009-10-04 27 views
14

Tôi đã tạo một bộ thu phát sóng trong hoạt động chính và dịch vụ nền đang gửi nội dung phát sóng. Các ứng dụng bị treo mỗi khi tôi cố gắng chạy nó và Log hiển thị thông báo lỗi sau:Lỗi khi nhận sự cố ý định phát sóng

10-04 13: 30: 43,218: LỖI/AndroidRuntime (695): java.lang.RuntimeException: Lỗi nhận Ý định phát sóng { action = com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE (có tính năng bổ sung)} trong [email protected]

thông điệp phát sóng được gửi từ Lớp CommunicationService theo phương thức sau:

private void announceLoginStatus(){ 
    Intent intent = new Intent(LOGIN_STATUS_UPDATE); 
    intent.putExtra(SERVER_MESSAGE, mServerResponseMessage); 
    intent.putExtra(SESSION_STRING, mSessionString); 
    sendBroadcast(intent); 
} 

nơi

String LOGIN_STATUS_UPDATE = "com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE" 

trong hoạt động chính reveiver phát sóng sau được xác định:

public class LoginStatusReceiver extends BroadcastReceiver { 

     public void onReceive(Context context, Intent intent) { 
      String serverMessage = intent.getStringExtra(CommunicationService.SERVER_MESSAGE); 
      String sessionString = intent.getStringExtra(CommunicationService.SESSION_STRING); 

      userInfo.setSessionString(sessionString); 
      saveSettings(); 
     } 
    } 

và đăng ký tại phương pháp onResume:

 IntentFilter loginStatusFilter; 
     loginStatusFilter = new IntentFilter(CommunicationService.LOGIN_STATUS_UPDATE); 
     loginStatusReceiver = new LoginStatusReceiver(); 
     registerReceiver(loginStatusReceiver, loginStatusFilter); 

Và file manifest tôi ncludes như sau:

<activity android:name=".GaitLink" 
       android:label="@string/app_name"> 
     <intent-filter> 
      ... 
      <action android:name="com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE" /> 
     </intent-filter> 
    </activity> 

Tôi thực sự đánh giá cao nếu có ai có thể giải thích lý do tại sao Nhật ký hiển thị thông báo ở trên và ứng dụng gặp sự cố.

Cảm ơn!

Trả lời

5

Bạn đã từng bước trong trình gỡ rối để tìm chính xác nơi xảy ra sự cố?

Một điều cần lưu ý là nếu bạn đang ghi đè bất kỳ sự kiện vòng đời Android nào mà bạn đang gọi đúng hàm tạo của lớp cơ sở khi cần thiết.

+58

Có thể bạn có thể cho chúng tôi biết vấn đề là gì? – Buffalo

4

Bạn có hai bộ lọc Intent; bạn chỉ cần một cái. Nếu bạn đăng ký BroadcastReceiver qua registerReceiver(), chỉ sử dụng IntentFilter là tham số thứ hai cho cuộc gọi API đó - không được đặt phần tử <intent-filter> trong số <activity> trong tệp kê khai.

Tôi không biết chắc chắn nếu đó là vấn đề của bạn, nhưng nó chắc chắn không giúp đỡ.

7

Tôi đã giải quyết nó bằng cách thêm intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); khi bạn bắt đầu một hoạt động mới.

Nếu không bắt đầu từ hoạt động, intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK" là cần thiết.

+0

nó hoạt động cho tôi! –

0

tôi nghĩ bạn phải sử dụng phương pháp vòng đời onPause()onResume() Phương thức hủy đăng ký và đăng ký mục đích phát sóng.

0

Tôi không chắc chắn rằng bạn có thể hiểu những gì tôi muốn nói, vì tiếng Anh của tôi.

Tôi nghĩ rằng dòng mã này là nguyên nhân của một vấn đề:

userInfo.setSessionString(sessionString); 

Dự án của tôi đã sai vì tôi muốn:

int i = Integer.parseint(intent.getExtars("9")); 

và bạn đăng ký hai lần.

0

Tôi thấy rằng đảm bảo ý định được chạy từ hoạt động ban đầu và đưa mọi thứ vào một lớp đã loại bỏ toàn bộ vấn đề.

-1

Ok gì làm việc đối với tôi là tuyên bố phương pháp onNotification như sau:

window.onNotification = function(event) { 
    alert('onNotification called!'); 
}; 
0

Đây là một câu hỏi rất cũ, nhưng tôi nghĩ rằng nhiều người vẫn sẽ tìm kiếm câu trả lời cho nó. Tình hình của tôi khá giống với tình huống này.

Điều tôi muốn làm là gọi kết thúc() trong hoạt động của trẻ khi các sự kiện nhất định xảy ra trong hoạt động của phụ huynh, bằng cách gửi tin nhắn quảng bá từ MainActivity đến Hoạt động cho trẻ em.

Tiếp theo là các mã trong MainActivity khi sự kiện đang xảy ra (ví dụ như khi kết nối mạng được chia etc etc):

Intent intent = new Intent("ACTIVITY_FINISH"); 
    intent.putExtra("FinishMsg","ACTIVITY_FINISH: Network broken."); 
    sendBroadcast(intent); 

Trong OnResume hoạt động trẻ() chức năng:

IntentFilter quitFilter = new IntentFilter(); 
    quitFilter.addAction("ACTIVITY_FINISH"); 
    registerReceiver(m_quitReceiver, quitFilter); 

Trong chức năng OnPause() của hoạt động trẻ em:

unregisterReceiver(m_quitReceiver); 

Trong hoạt động của trẻ em cl ass:

BroadcastReceiver m_quitReceiver = new BroadcastReceiver() 
{ 
    public void onReceive(Context context, final Intent intent) 
    { 
     if (intent.getAction().equalsIgnoreCase("ACTIVITY_FINISH")) 
     { 
      Log.d("INFO", intent.getExtras().getString("FinishMsg")); 
      finish(); // do here whatever you want 
     } 
    } 
}; 

Hy vọng điều này sẽ hữu ích.

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