0

I have a service that collects sensor data. The service is started in a class, lets call it x. Inside x I've defined a few methods for a JavaScript interface in a webview.

now I need to get that data inside x to inject it to the webview to post it to server. what is the best practice for this?

How can I get a reference to the service instance inside x so I can access its methods and properties?

4

2 回答 2

2

我知道两种方法。将您的服务声明为单例并实现访问变量的方法。

YourService.getInstance().getVariable();

但我不会推荐这种方法。

另一种方法是使用Android提供的binder系统。

在您的活动中编码。

private YourService yourService;
private boolean serviceBound = false;
private ServiceConnection serviceConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName cn, IBinder ib) {
        yourService = ((YourService.ServiceBinder) ib).getInfo();
        serviceBound = true;
    }

    public void onServiceDisconnected(ComponentName cn) {
        serviceBound = false;
    }
};

然后你可以在你的服务对象上调用你的服务中实现的方法。

您还必须像这样在您的服务中实现一个活页夹。

public class ServiceBinder extends Binder {

    public YourService getInfo() {
        return YourService.this;
    }
}

希望它有所帮助。

于 2013-11-14T16:37:22.733 回答
2

不确定它是否是最好的方法,但我最近通过使用应用程序结构解决了这个问题。

创建一个类。

public class myApp extends Application {
    public int yourData;
}

然后使用以下代码从程序中的任何 Activity 访问。

myApp app = (myApp) getApplication();
int localVar = app.yourData;

不要忘记更新您的 Android 清单

    <application
    android:name="myApp"
于 2013-11-14T16:39:34.957 回答