从应用程序调用活动

时间:2016-05-30 07:13:23

标签: android twitter-oauth twitter-digits android-application-class

我正在尝试使用 Twitter 中的数字。 从活动中使用时,不会触发 AuthCallBack ,而最近document说要使用应用程序类中的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;
        }
}

2 个答案:

答案 0 :(得分:5)

您可以使用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();
        }
    };

答案 1 :(得分:3)

使用界面即可实现此目的

编写类似这样的界面

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

在主要活动中实施此界面

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) {

    }
}

希望这会对你有所帮助