2012-11-14 21 views
5

Có lẽ tôi đang đi về điều này một cách sai lầm, nhưng tôi muốn trả lời sự kiện nhấp của Android AppWidget trong ứng dụng của riêng tôi VÀ khởi chạy Hoạt động. Vào thời điểm tôi đặt số PendingIntent, tôi có một số khác là Intent mà tôi muốn khởi chạy khi được nhấp. My onStartCommand sử dụng dòng này:Gửi Intent bên trong của Intent

final Intent mLaunchIntent = (Intent) intent.getParcelableExtra(Widget.EXTRA_INTENT); 

Khi tôi gọi setOnClickPendingIntent Tôi có dòng này trước:

mSendingIntent.putExtra(Widget.EXTRA_INTENT, (Parcelable) mLaunchIntent); 

Vì vậy, mặc dù mLaunchIntent là một giá trị Intent trong cả hai dòng, dòng đầu tiên là mất tích rất nhiều Dữ liệu. Gọi startActivity sau đó không thành công vì Intent không hợp lệ.

Tôi tự hỏi nếu nó là có thể, và làm thế nào, để gửi một Intent bên trong khác Intent mà không gọi đúng putExtras vì đó phương pháp đơn giản bổ sung thêm các tính năng bổ sung từ một Intent tiếp theo. Tôi muốn giữ hai thứ này riêng biệt và dễ dàng tiếp cận.

Trả lời

1

Bạn không thể sử dụng số service để phân tích cú pháp Ý định?

+0

Tôi đang sử dụng Dịch vụ nhưng Dịch vụ đó được gọi với Mục đích, trong trường hợp này là 'mSendingIntent'. Tôi cần phải truyền 'mLaunchIntent' cùng với Intent đó để sự kiện nhấn đó khởi chạy một Activity. – Tom

1

Có nhiều cách khác nhau để bạn có thể truyền các ý định/đối tượng từ nguồn đến đích và ngược lại. Một cách để thực hiện nó mà không cần sử dụng các gói hoặc phần bổ sung sẽ được dùng đến các phương thức lớp thông thường với các biến (getters và setters). Vượt qua các đối tượng bằng cách sử dụng các phương thức. Một cách làm khác là sử dụng các biến lớp. Ví dụ:

public class ClassB extends Activity{ 
    public static Object myObject; 
    ... 
} 

public class ClassA extends Activity{ 
    ... 
    @override 
    protected void onCreate(Bundle savedInstanceState){ 
     Object myObject = ClassB.myObject; 
    } 
} 
+0

Đó là ... một giải pháp. Nhưng điều đó không thành công trong trường hợp của tôi vì một số vấn đề. Đối với một, điều gì sẽ xảy ra nếu người dùng nhấp vào hai tiện ích theo thứ tự. Tôi không muốn sửa đổi một biến toàn cầu hoặc phải thiết lập một số loại hàng đợi toàn cầu. Ngoài ra, Dịch vụ và BroadcastReceiver hoạt động trên các Chủ đề khác nhau. Điều kiện cuộc đua làm cho điều này trở thành một giải pháp rất phức tạp. – Tom

7

Tôi thực sự đã tìm ra giải pháp khá đơn giản. mLaunchIntent không được truyền tới Parcelable hoặc dữ liệu bị mất.

mSendingIntent.putExtra(Intent.EXTRA_INTENT, mLaunchIntent); 

Đó là tất cả những gì tôi cần phải gửi một Intent qua Intent khác.

+0

hiện nó thực sự hoạt động? bạn đã thử nó chưa –

+0

Nên có 'Intent.EXTRA_INTENT' thay vì' Widget.EXTRA_INTENT' – GreenRobo

+0

bạn có thể cho biết, làm cách nào để truy lục mục đích và truyền cho đối tượng có chủ ý – JSONParser