標籤:android class blog code java http
一、通過廣播方式:
1、比如登入。假如下面這個方法是外界調用的,那麼怎樣在LoginActivity裡面執行登入操作,成功之後在回調listener介面呢?如果是平常的類,可以通過建構函式將監聽類對象傳入即可。但是在Activity中不能傳遞監聽對象,所以考慮使用廣播來實現。
public void login(final LoginOnClickListener listener) { Intent intent = new Intent(context, LoginActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); BroadcastReceiver mReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { listener.handleLogin(true, "receiver .. BroadcastReceiver .. "); } }; IntentFilter intentFilter = new IntentFilter("android.intent.action.MAIN"); context.registerReceiver(mReceiver, intentFilter); context.startActivity(intent);}
2、在LoginActivity類中登入成功之後,發送一個廣播通知登入成功。
Intent intent = new Intent("android.intent.action.MAIN"); sendBroadcast(intent);
參考:http://buddie.iteye.com/blog/977352
二、通過靜態對象:
我在做項目時遇到一個問題,第三方調用的SDK,我的sdk裡面有一個登入方法,在登入方法裡面又啟動一個sdk裡面的登入介面,使用者登入成功之後,怎樣通知登入方法即第三方。後來想到了廣播,如第一種方式是可以的。
後來看到別人代碼中採用靜態對象,然後我試了以下這種方式也可以。因為靜態對象不管所在類建立多少個對象,它都是不變的。下面是具體實現:
public class SDKLibPlatform { private Activity context; private SDKLibPlatform() { } private static SDKLibPlatform platform = new SDKLibPlatform(); public static SDKLibPlatform getInstance() { if (platform == null) { return new SDKLibPlatform(); } return platform; } public static Callback listener; /** * 登入方法 * * @param listener * 回呼函數 */ public void login(Callback callback) { //將這個回呼函數儲存在listener對象上 listener = callback; Intent intent = new Intent(context, LoginActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //啟動activity context.startActivity(intent); } SDKLibPlatform.listener.handle(false, "login ....... "); public interface Callback { public void handle(boolean status, String message); }}
啟動LoginActivity之後,在使用者登入成功或者失敗是調用 listener 對象的handle方法,從而可以通知到第三方。
if (code==1) { //登入成功 SDKLibPlatform.listener.handle(true, "login success ....... ");}else { SDKLibPlatform.listener.handle(false, "login false ....... ");}
第三方調用的代碼:
SDKLibPlatform.getInstance().login(new Callback(){ @Override public void handle(boolean status,String message) { System.out.println(status+" -====================> "+message); } });