2012-12-24 37 views
7

Tôi đã một hoạt động giả "Hoạt động A" mà tôi bắt đầu bằng việc hai cách
a) StartActivity()
b) StartActivityForResult()
Bây giờ tôi có vài phương pháp mà đang có hành vi khác nhau đối với hoạt động cách bắt đầu. Bây giờ tôi muốn phát hiện rằng "Hoạt động A" được bắt đầu cho kết quả. Vì vậy, câu hỏi của tôi làm thế nào chúng ta có thể phát hiện ra rằng các hoạt động được bắt đầu cho kết quả? Tôi không muốn gửi dữ liệu thông qua mục đích. Bất kỳ cách nào khác tổng quát hơn?hoạt động Phát hiện được bắt đầu cho kết quả

Cảm ơn bạn.

+1

'gửi dữ liệu thông qua intent' bản thân là cách tối ưu. –

Trả lời

-1

Gửi một số boolean tắm khi gọi nó bằng

intent.putExtra("mBool", true); 
startActivityForResult(intent); 

Tùy thuộc vào giá trị đó, những hành động tương ứng được thực hiện.

if(getIntent().hasExtra("mBool")){ 

//ForResult 
}else{ 

//default 
} 
+1

Imho, giải pháp tồi. Tại sao thêm độ phức tạp vào ứng dụng khi bạn chỉ cần kiểm tra 'this.getCallingActivity()! = Null'? –

+0

Vì tôi hiểu rằng bạn chỉ có thể nhận được hoạt động gọi điện khi đang gọi kết quả. Trong trường hợp hoạt động không gọi giá trị kết quả, bạn không thể thay đổi hành vi tùy thuộc vào hoạt động gọi điện. Vì vậy, trong trường hợp bạn có nhiều hoạt động gọi một hoạt động khác, bạn không thể phân biệt được – Goot

+0

Anwser xấu vì nó không sử dụng giải pháp gốc của Android –

1

Bạn không cần phải chuyển bất kỳ dữ liệu giả mạo nào trong số Intent. Hoạt động có phương pháp để kiểm tra bắt đầu Activity nó được gọi là getCallingPackage()

Từ các tài liệu:

Return tên của gói phần mềm đó gọi hoạt động này. Đây là số dữ liệu trong setResult() sẽ được gửi đến. Bạn có thể sử dụng thông tin này để xác thực rằng người nhận được phép nhận dữ liệu.

10

Từ this answer

Khi hoạt động của bạn được bắt đầu chỉ bằng cách startActivity() là một phương pháp getCallingActivity() trong hoạt động mục tiêu sẽ trả về null. Khi nó được gọi bởi startActivityForResult() nó sẽ trả về tên của hoạt động gọi điện.

Ví dụ:

if (getCallingActivity() == null) { 
    //This Activity was called by startActivity 
} else { 
    //This Activity was called by startActivityForResult 
} 
+2

Phải là câu trả lời chính xác;) –

+0

nhờ nó hoạt động hoàn hảo +1 –

+0

nó không hoạt động khi Intent.FLAG_ACTIVITY_NEW_TASK được đặt – Hector

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