2009-09-23 38 views
13

Tôi gặp sự cố khi gửi dữ liệu từ Dịch vụ tới Hoạt động thông qua Thông báo, tôi nhấp vào Thông báo một Hoạt động được gọi nhưng khi tôi cố gắng thêm một số tham số thông qua gói, tôi không thể lấy thông số gọi là ý định, tôi đã đi qua liên kết How to send parameters from a notification-click to an activity?Gửi dữ liệu từ dịch vụ đến hoạt động

Nhưng vẫn không có may mắn.

Có vấn đề tương tự xảy ra với người khác không?

Xin cảm ơn trước.

+0

Làm cách nào để gửi dữ liệu từ dịch vụ đến hoạt động? –

Trả lời

18

Bạn cũng phải sửa đổi tệp kê khai.

Dưới đây là ví dụ mà làm việc:

Các biến và các phương pháp đều là thành viên của lớp dịch vụ:

public static final String MOVEMENT_UPDATE = "com.client.gaitlink.AccelerationService.action.MOVEMENT_UPDATE"; 
    public static final String ACCELERATION_X = "com.client.gaitlink.AccelerationService.ACCELERATION_X"; 
    public static final String ACCELERATION_Y = "com.client.gaitlink.AccelerationService.ACCELERATION_Y"; 
    public static final String ACCELERATION_Z = "com.client.gaitlink.AccelerationService.ACCELERATION_Z"; 

private void announceAccelerationChanges()//this method sends broadcast messages 
    { 
     Intent intent = new Intent(MOVEMENT_UPDATE); 
     intent.putExtra(ACCELERATION_X, accelerationX); 
     intent.putExtra(ACCELERATION_Y, accelerationY); 
     intent.putExtra(ACCELERATION_Z, accelerationZ); 

     sendBroadcast(intent); 
    } 

Và đây là những phương pháp từ hoạt động chính:

Bạn phải đăng ký nhận trong phương pháp onResume:

@Override 
    public void onResume() 
    { 

     IntentFilter movementFilter; 
     movementFilter = new IntentFilter(AccelerationService.MOVEMENT_UPDATE); 
     accelerationReceiver = new AccelerationServiceReceiver(); 
     registerReceiver(accelerationReceiver, movementFilter); 


     startAccelerationService(); 

     super.onResume(); 
    } 

    private void startAccelerationService() 
    { 
     startService(new Intent(this, AccelerationService.class)); 
    } 

    public class AccelerationServiceReceiver extends BroadcastReceiver 
    { 
     @Override 
     public void onReceive(Context context, Intent intent)//this method receives broadcast messages. Be sure to modify AndroidManifest.xml file in order to enable message receiving 
     { 
      accelerationX = intent.getDoubleExtra(AccelerationService.ACCELERATION_X, 0); 
      accelerationY = intent.getDoubleExtra(AccelerationService.ACCELERATION_Y, 0); 
      accelerationZ = intent.getDoubleExtra(AccelerationService.ACCELERATION_Z, 0); 

      announceSession(); 

      updateGUI(); 
     } 
    } 

Đây là t anh ta là một phần của tệp AndroidManifest.xml phải được đặt để nhận tin nhắn phát sóng:

<activity android:name=".GaitLink" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 

       <action android:name="com.client.gaitlink.CommunicationService.action.ACTIVITY_STATUS_UPDATE" /> 

      </intent-filter> 
     </activity> 
+0

Tôi đã thử điều này nhưng nó không hoạt động như mong đợi .. tôi đã viết bản tường trình nhưng không hiển thị trong phương thức onRecieve .những gì sai tôi có thể làm tôi đang làm như đã nói! – Sam97305421562

+0

Dịch vụ có phát tin nhắn không? BroadcastReceiver đã được bắt đầu và chạy trong hoạt động chưa? Bạn đã thêm bộ lọc ý định trong AndroidManifest.xml chưa? –

+0

tôi đã thêm BroadcastReceiver trong tệp AndroidManifest.xml, có dịch vụ phát sóng như thế nào tôi có thể xác nhận rằng BroadcastReceiver đã được bắt đầu. – Sam97305421562

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