[英]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.