2

TwitterのDigitsを使用しようとしています。アクティビティから使用された場合、AuthCallBackは起動されず、 Applicationクラスから AuthCallBack を使用するように指示された最近のドキュメント。

これで、AuthCallBackが正しく機能し、onSuccess で MainActivity からメソッドを呼び出す必要があります。Application クラスからそれを達成するにはどうすればよいですか。親切に助けてください。私は以下のコードを与えました。

public class MyApplication extends Application {

    private AuthCallback authCallback;

    @Override
    public void onCreate() {
        super.onCreate();

        authCallback = new AuthCallback() {
            @Override
            public void success(DigitsSession session, String phoneNumber) {

                //call myFunction() from MainActivity here

            }

            @Override
            public void failure(DigitsException exception) {

            }
        };
    }

    public AuthCallback getAuthCallback(){
        return authCallback;
        }
}
4

2 に答える 2

8

BroadcastManager を使用して、同じものをアーカイブできます。以下は、使用できるサンプルコードです

アプリケーションから:

    @Override
    public void success(DigitsSession session, String phoneNumber) {
    Intent intent = new Intent(Constants.FILTER_LOGIN_SUCCESS);
    intent.putExtra(Constants.EXTRA_PHONE_NUMBER, phoneNumber);
    LocalBroadcastManager.getInstance(mInstance).sendBroadcast(intent);
}

活動クラス :

@Override
    protected void onResume() {
        super.onResume();
        LocalBroadcastManager.getInstance(SignUpActivity.this).registerReceiver(broadcastReceiver,
                new IntentFilter(Constants.FILTER_LOGIN_SUCCESS));
    }

@Override
protected void onDestroy() {
    super.onDestroy();
    LocalBroadcastManager.getInstance(SignUpActivity.this).unregisterReceiver(broadcastReceiver);
}

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String phoneNumber = intent.getStringExtra(Constants.EXTRA_PHONE_NUMBER);
            navigateToAnotherActivty();
        }
    };
于 2016-05-30T07:17:45.887 に答える
4

インターフェイスを使用すると、これを実現できます

このようなインターフェースを書く

public interface onSuccessListner {
    void onSuccess(DigitsSession session,String phoneNumber);
}

このインターフェースを Main Activity に実装します

public class MainActivity extends AppCompatActivity implements onSuccessListner{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onSuccess(DigitsSession session,String phoneNumber) {
        //write your method calling or operations here
        }
} 

アプリケーション クラスで Application.ActivityLifecycleCallbacks を実装して、メイン アクティビティが作成されているかどうかを確認します。メイン アクティビティが作成された場合は、メイン アクティビティのコンテキストをリスナーに適用します。

コールバック メソッド内の作成時に、MainActivity の成功メソッドを呼び出します。

public class MyApplctn extends Application implements Application.ActivityLifecycleCallbacks {
    onSuccessListner onSuccessListner;
    @Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(this);
        authCallback = new AuthCallback() {
            @Override
            public void success(DigitsSession session, String phoneNumber) {

                //call myFunction() from MainActivity here
                if(onSuccessListner!=null){
                    onSuccessListner.onSuccess(session,phoneNumber);
                 }
           }

            @Override
            public void failure(DigitsException exception) {

            }
        };

    }

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
        if (activity instanceof MainActivity) {
            onSuccessListner= (com.mmadapps.myapplication.onSuccessListner) activity;
        }
    }

    @Override
    public void onActivityStarted(Activity activity) {

    }

    @Override
    public void onActivityResumed(Activity activity) {

    }

    @Override
    public void onActivityPaused(Activity activity) {

    }

    @Override
    public void onActivityStopped(Activity activity) {

    }

    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

    }

    @Override
    public void onActivityDestroyed(Activity activity) {

    }
}

これがあなたを助けることを願っています

于 2016-05-30T07:57:10.717 に答える