2013-06-05 28 views
6

Tôi biết tôi có thể làm lớp thu bên trong để gọi bất kỳ phương thức nào từ người nhận của tôiGọi phương thức hoạt động từ lớp BroadcastReceiver

Nhưng hoạt động chính của tôi quá lớn và không hoạt động. Vì vậy, tôi sẽ cần một lớp mở rộng bộ thu phát sóng nhưng không phải là lớp bên trong. Và có thể gọi một phương thức từ hoạt động chính của tôi. Tôi không biết nếu nó có thể, nhưng hoạt động của tôi là một hoạt động Home và một hoạt động "singleInstance" để có thể với chi tiết này, ai đó có một cách để truy cập vào hoạt động của tôi.

Nếu không thể, bất kỳ cách nào để tách một số mã java trong nhiều tệp chính của tôi có hơn 600 dòng. (Và cung cấp thông tin tôi có đã 19 file java cho một phiên bản alpha của ứng dụng của tôi vì vậy tôi đã cố gắng phân chia nó)

+0

bạn không thể vượt qua bối cảnh hoạt động để BrodcastRecevier của bạn và sử dụng nó để bắt đầu hoạt động? – Blackbelt

+0

Các hoạt động luôn luôn khởi động tôi không muốn khởi động nó từ người nhận chỉ cần gọi một phương pháp – Jebik

Trả lời

18

Tạo BroadcastReceiver động:

Trong lớp BroadcastReceiver bạn xác định thành viên lớp:

YourMainActivity yourMain = null; 

và phương pháp:

setMainActivityHandler(YourMainActivity main){ 
yourMain = main; 
} 

từ MainActivity bạn làm:

private YourBroadcastReceiverClassName yourBR = null; 
yourBR = new YourBroadcastReceiverClassName(); 
    yourBR.setMainActivityHandler(this);  
    IntentFilter callInterceptorIntentFilter = new   IntentFilter("android.intent.action.ANY_ACTION"); 
    registerReceiver(yourBR, callInterceptorIntentFilter); 

cuối cùng, khi yourBR.onReceive là bắn bạn có thể gọi:

yourMain.methodOfMainActivity(); 
+0

Cần tôi xác định hành động của tôi trong Manifest với phương pháp này hoặc intentfilter là đủ để có được phát sóng? – Jebik

+0

Bộ lọc mục đích là đủ – blganesh101

+1

Ok cảm ơn tôi đã thử điều này. chỉ cần chỉnh sửa bài viết của bạn thay đổi callInterceptor bởiBR của bạn trong registerReceiver gọi nếu một số khác đọc này: P – Jebik