2013-03-11 30 views
5

Bên trong bộ thu phát sóng Tôi muốn khởi động ứng dụng (Hoạt động) và chuyển một số dữ liệu.Thiếu tính năng bổ sung khi hoạt động bắt đầu

Vấn đề của tôi là các tính năng bổ sung dường như không chuyển sang hoạt động. Tôi đang cố gắng lấy dữ liệu bên trong hàm onNewIntent(Intent i).

Bất kỳ ý tưởng nào?

Đây là nỗ lực của tôi hiện tại trong BroadcastReceiver:

Intent intSlider = new Intent(); 
intSlider.setClass(UAirship.shared().getApplicationContext(), SliderMenuActivity.class); 
intSlider.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

intSlider.putExtra("action", ScreensEnum.Object); 
intSlider.putExtra("objectId", objectId); 
intSlider.putExtra("objectCode", objectCode); 
intSlider.putExtra("userId", userId); 

UAirship.shared().getApplicationContext().startActivity(intSlider); 

EDIT - Thêm mã được sử dụng trong onNewIntent() và phương thức onCreate()

Các mã sau công trình lớn trong onCreate() khi ứng dụng hiện không chạy. Khi ứng dụng đang chạy cùng một mã không hoạt động (tức là không có phần bổ sung) từ hàm onNewIntent().

Intent intent = getIntent(); 

if(intent.hasExtra("objectId")) { 

    loadDetail(intent.getStringExtra("objectId"), "2w232"); 
} 
+0

Phương thức 'onNewIntent' có được gọi là? Bạn đã chỉ định 'launchMode' nào cho' SliderMenuActivity'? –

+0

Xin chào, có onNewIntent() được gọi. launchMode là singelTask. – conor

+0

Sau đó bạn có thể đăng phương thức 'onNewIntent' của mình không? –

Trả lời

0

Extract từ các tài liệu

này được gọi là cho các hoạt động chính xác đến launchMode để "singleTop" trong gói của họ, hoặc nếu một khách hàng sử dụng các FLAG_ACTIVITY_SINGLE_TOP cờ khi gọi startActivity (Ý định). Trong cả hai trường hợp, khi hoạt động được khởi chạy lại trong khi ở đầu ngăn xếp hoạt động thay vì một phiên bản mới của hoạt động đang được bắt đầu, trênNewIntent() sẽ được gọi là trên phiên bản hiện tại với Mục đích đã được sử dụng để khởi chạy lại .

Một hoạt động sẽ luôn bị tạm dừng trước khi nhận được ý định mới, vì vậy bạn có thể tin cậy vào onResume() được gọi sau phương thức này.

Lưu ý rằng getIntent() vẫn trả về mục đích ban đầu. Bạn có thể sử dụng setIntent (Intent) để cập nhật nó cho Mục đích mới này.

Tôi nghĩ đoạn cuối giải thích vấn đề của bạn.

+0

Ahmed, tôi không nghĩ rằng bạn đã hoàn toàn hiểu cách Task và Stack hoạt động trong Android, vì vậy câu trả lời của bạn không thực sự chính xác. Hãy đọc về cách họ làm việc tại đây: http://developer.android.com/guide/components/tasks-and-back-stack.html –

+0

Cho dù hoạt động đã chạy hay không cũng không ảnh hưởng đến việc các tính năng bổ sung có được hay không giao hàng, vì vậy một lần nữa, tôi nghĩ rằng bạn đã hiểu lầm cách nó hoạt động như thế nào –

+0

Có. nhưng nó ảnh hưởng đến thời tiết ý định được chuyển giao, phải không? –

7

Sự cố là getIntent(). Nó luôn trả về ý định rằng bắt đầu hoạt động, không phải là hoạt động gần đây nhất. Bạn nên sử dụng ý định được chuyển đến phương thức onNewIntent làm đối số.

+1

Cùng một điều, khi gỡ lỗi tôi đã kiểm tra cả hai ý định. Cả hai đều trống rỗng. – conor

+0

hmm .. Tôi chưa bao giờ gặp vấn đề này và tôi không thể tìm thấy bất kỳ thông tin hữu ích nào trên google .. = ( –

-1

Bạn có thể lưu trữ ý định đã nhận cuối cùng trong biến thành viên (mLastIntent). Sau đó, bạn có thể sử dụng thành viên này trong phương thức onResume() để truy vấn dữ liệu bổ sung của mình.

private Intent mLastIntent; 
@Override 
protected void onNewIntent(Intent intent) { 
    mLastIntent = intent; 
}; 
+0

vui lòng thêm các thẻ, câu hỏi này không được giải thích rõ ràng, không rõ ngôn ngữ lập trình là gì. –

1

Bạn phải đặt cờ FLAG_ACTIVITY_SINGLE_TOP hoặc đặt khởi chạyMột lầnTop trong tệp kê khai.

Tất nhiên khi onNewIntent được gọi là bạn không sử dụng getIntent nhưng Intent nhận được làm đối số. onNewIntent sẽ được gọi khi phiên bản hoạt động đã tồn tại. Ví dụ: nếu lần cuối bạn nhấn nút Màn hình chính.

Tôi đã viết một giải pháp phù hợp với tôi tại đây: Intent with old extra in onCreate() for singleTask Activity

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