java - Android自定义服务-类实现

标签 java android multithreading location locationlistener

在确定应该实现我的后台自定义服务类的方式时,我有些困惑。

我需要的 :

  • 位置更新和 Activity 识别。
  • REST API调用和Geofence API。

  • 我是Android后台处理的新手,我不确定如何实现此功能。

    是否可以制作ThreadPoolExecutor(任务管理器类,可运行对象等)并处理线程间通信?

    如果是,是否可以在Thread类中监听位置更新?

    现在,我正在使用此库(Smart-location-lib)来收听位置更新。

    有更好的解决方案吗?

    任何帮助是极大的赞赏 !

    最佳答案

    这是在后台服务中使用Google API的最佳方法
    您没有解释 Activity 识别的含义是什么?

    public class MyLocationService extends Service implements LocationListener,
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener {
    
    private GoogleApiClient mGoogleApiClient;
    private LocationRequest mLocationRequest;
    
    public MyLocationService() {
    
    }
    
    @Override
    public void onCreate() {
        super.onCreate();
    
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addApi(LocationServices.API).
                        addConnectionCallbacks(this).
                        addOnConnectionFailedListener(this)
                .build();
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        mGoogleApiClient.connect();
        Toast.makeText(this, "Location services started", Toast.LENGTH_SHORT).show();
        return super.onStartCommand(intent, flags, startId);
    }
    
    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
    
    @Override
    public void onLocationChanged(Location location) {
        System.out.println("MyLocationService.onLocationChanged");
        // TODO with location updateshere
    }
    
    @Override
    public void onConnected(Bundle bundle) {
    
        mLocationRequest = LocationRequest.create();
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        mLocationRequest.setInterval(1000); // Update location every second
    
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
        Location loc = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
        sendMyLocUpdate(loc, UserProfile.DRIVER);
    }
    
    @Override
    public void onConnectionSuspended(int i) {
    
    }
    
    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
    
    }
    
    @Override
    public void onDestroy() {
    
        Toast.makeText(this, "Location services stopped", Toast.LENGTH_LONG).show();
    
        Location loc = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
        sendMyLocUpdate(loc, UserProfile.PASSENGER);
    
        mGoogleApiClient.disconnect();
        super.onDestroy();
    }
    

    }

    关于java - Android自定义服务-类实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30585373/

    相关文章:

    java - 无法使用带有 Java 和 chrome 的 WebDriver Selenium 3 将 key 发送到 eBay 用户名字段

    android - 如何在android SDK中过滤不需要的包?

    android - 为什么我的弹出菜单是黑色的?

    java - java中的同步方法

    java - 使用 SOAP 中请求的证书注册协议(protocol) "https"多线程(轴 2)

    java - 如何有条件地选择 XPath 中的节点

    java - 如何仅打印数组中具有重复字符的单词?

    java - 无法从 java/Android Studio 中的网站获取数据

    java - 我应该从 getFft 看到什么样的输出?

    ios - CoreData并发和释放对象