首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将变量从服务内的线程发送到主活动

将变量从服务内的线程发送到主活动
EN

Stack Overflow用户
提问于 2018-04-06 02:09:43
回答 2查看 49关注 0票数 0

我有一个位置侦听器在服务类内部的单独线程上运行,如下所示:

代码语言:javascript
复制
public void onCreate() {
        locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);

        final Criteria locCriteria = new Criteria();
        locCriteria.setPowerRequirement(Criteria.POWER_LOW);
        locCriteria.setAccuracy(Criteria.ACCURACY_FINE);
        locCriteria.setSpeedRequired(true);

        locThread = new Thread(new Runnable() {
            @Override
            public void run() {
                provider = locationManager.getBestProvider(locCriteria, true);
                listener = new LocationListener() {
                    @Override
                    public void onLocationChanged(Location location) {
                        longitude = location.getLongitude();
                        latitude = location.getLatitude();
                        Log.i("Lat changed", String.valueOf(latitude));
                        Log.i("Lon changed", String.valueOf(longitude));
                    }

我如何将协助表发送回主activity类,以便在文本视图中显示它们?除了使用广播之外。

EN

回答 2

Stack Overflow用户

发布于 2018-04-06 02:55:26

试着用我的代码

创建类似于的接口

代码语言:javascript
复制
public interface Message {
void latitudeandlongitude(double lat,double log);
}

然后在您的服务类中使用

代码语言:javascript
复制
public void oncreate()
{
    Message ms=new Activity();

    new Thread(new Runnable() {
        @Override
        public void run() {
            for(int i=0;i<=10;i++)
            {
                //pass the latitude and longitude value
                ms.latitudeandlongitude(50.264,96.856);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }).start();
}

然后在Activity中执行

代码语言:javascript
复制
public class Activity implements Message {
String textview; //use findviewbyId in oncreate method
@Override
public void latitudeandlongitude(double lat, double log) {
    textview.setText("Your latitude "+lat+" Your longitude "+log);

    //System.out.println("Your latitude "+lat+" Your longitude "+log);
}

}

票数 1
EN

Stack Overflow用户

发布于 2018-04-06 02:59:33

您可以将LocationListener的实例传递给您的服务,而不是在那里实现侦听器。例如:

代码语言:javascript
复制
public class MyService extends Service {

    private LocationListener locationListener;

    public MyService(LocationListener locationListener) {
        this.locationListener = locationListener;
    }

    @Override
    public void onCreate() {
        // Do your stuff
        // add this location listener where it needs to be
    }

}

然后,在您的活动或片段中,实现LocationListener并按照您的意愿处理结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49678841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档