繁体   English   中英

Android在库和应用程序之间通信

[英]Android comunicate between library and app

我正在Android中创建一个库,并且希望在发生某些事件后将一些值(字符串)从该库传递给正在使用该库的应用程序。 使用该库的应用程序只有一个屏幕来显示库发送的字符串。

我的应用程序具有MainActivity ,它将使用库接收的事件填充listView 它还有一个MyApp扩展了Application

在这里,我正在这样做:

public class MyApp extends Application{

    private static MyApp sMyApp;


    public MyApp() {

    }

    @Override
    public void onCreate() {
        super.onCreate();
        sMyApp= this;

        MyLibrary.getInstance().setApplication(sMyApp);

    }

    public static MyApp getInstance() {
        return sMyApp;
    }

}

在我的图书馆中:

public class MyLibrary {
    private static MyLibrary sInstance = new MyLibrary();
    private Application mMyApp;

    public static MyLibrary getInstance() {
        return sInstance;
    }

    private MyLibrary() {
    } 

    public void setApplication(Application myApp) {
        mMyApp = myApp;

    }

    public void sendEventMessage(String message) {
        mMyApp.setEvent(message);
    }
}

我试图在MainActivity实现一个接口,以便mMyApp.setEvent(message); 可以发送MainActivity可以接收但没有成功的消息。

我该如何假装自己?

您可以尝试回调作为此示例:

首先,在库中声明您的回调

public interface ILibrary {
public void onStart(String msg);

public void onProcess(String msg);

public void onFish(String msg);}

public class SDK {
private static final String START = "I'm started";

private static final String PROCESSING = "I'm running";

private static final String STOP = "I'm done";

private ILibrary mCallback;

// Make it easy for demo
public SDK(ILibrary callback) {
    mCallback = callback;
}

public void start() {
    mCallback.onStart(START);
}

public void process() {
    mCallback.onProcess(PROCESSING);
}

public void stop() {
    mCallback.onFish(STOP);
}}

然后执行类似的操作:

SDK sdk = new SDK(new ILibrary() {

    @Override
    public void onStart(String msg) {
        Log.d("TAG", msg);
    }

    @Override
    public void onProcess(String msg) {
        Log.d("TAG", msg);
    }

    @Override
    public void onFish(String msg) {
        Log.d("TAG", msg);
    }
});

AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>() {

        @Override
        protected Void doInBackground(Void... params) {
            sdk.process();
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            sdk.stop();
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            sdk.start();
        }

    };
    asyncTask.execute();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM