안드로이드 학습노트74_Android 콜백 함수가 트리거하는 몇 가지 방식으로 정적 대상을 방송합니다

1. 방송 방식:
1. 예를 들어 로그인.만약 아래의 이 방법이 외부에서 호출된다면, 어떻게 Loginactivity에서 로그인 작업을 실행하고, 성공한 후에 리셋listener 인터페이스를 실행합니까?일반적인 클래스라면 구조 함수를 통해 감청 클래스의 대상을 전송하면 된다.다만 액티비티에서는 감청 대상을 전달할 수 없어 방송을 활용해 구현하는 방안을 검토하고 있다.
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
2. 정적 대상을 통해:
프로젝트를 할 때 제3자가 호출한 SDK에 문제가 발생했습니다. 제 sdk에 로그인 방법이 있는데 로그인 방법에서 또 하나의 sdk에 있는 로그인 인터페이스를 시작합니다. 사용자가 로그인에 성공한 후에 로그인 방법이 바로 제3자에게 어떻게 통지해야 하는지.나중에 라디오가 생각났어요. 첫 번째 방식대로 할 수 있어요.
나중에 다른 사람의 코드에서 정적 대상을 사용하는 것을 보고 나는 다음과 같은 방식을 시도해 보았다.정적 대상은 클래스가 얼마나 많은 대상을 만들든지 상관없이 변하지 않기 때문이다.다음은 구체적인 실현이다.
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 방법을 호출하여 제3자에게 알릴 수 있습니다.
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);  

                                }

                            });

좋은 웹페이지 즐겨찾기