不活动,与服务断开连接 - 使用服务中的GoogleApiClient

时间:2017-01-27 22:13:07

标签: android android-service google-api-client google-drive-android-api appdata

我正在创建一项服务,使用 Google Drive Android API 将文件上传到 Google云端硬盘应用数据文件夹

我在服务的GoogleApiClient方法中初始化了onCreate()。然后,我编写了代码,将文件上传到Google云端硬盘,并在GoogleApiClient'的覆盖onConnected()方法中上传。

我面临的问题是,当我启动Service时,会调用onCreate()方法。在此方法中,初始化GoogleApiClient对象并调用connect()函数。之后,在调用onConnect()之前(成功连接GoogleApiClient时),日志中会显示以下消息

"不活动,断开与服务的连接"

因此,永远不会调用onConnect()方法,并且永远不会执行我的文件上传代码。请在下面找到代码段。任何建议都会有所帮助。

public class GDriveFileUploadService extends Service implements GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener{

private static final String TAG = GDriveFileUploadService.class.getSimpleName();
GoogleApiClient mGoogleApiClient;

public GDriveFileUploadService() {
}

@Override
public void onCreate() {
    super.onCreate();
    Log.d(TAG,"Initializing GoogleApiClient..");
    this.mGoogleApiClient = new GoogleApiClient.Builder(GDriveFileUploadService.this)
            .addApi(Auth.GOOGLE_SIGN_IN_API, GoogleSignInOptions.DEFAULT_SIGN_IN)
            .build();

    this.mGoogleApiClient.connect();

}

@Override
public void onConnected(@Nullable Bundle bundle) {
    Log.d(TAG,"GoogleApiClient connected in service");
    //Code to upload file to Google Drive
}

//Other functions..

}

1 个答案:

答案 0 :(得分:0)

使用此JobService

首先,您需要创建一个运行主服务的引导服务

@TargetApi( Build.VERSION_CODES.LOLLIPOP )
public class BootService extends JobService {

@Override
public void onCreate() {
    super.onCreate();

    new Handler().postDelayed(() -> {
        if ( PreferenceManager.getToken(BootService.this) != null && !PreferenceManager.isNeedProvideInfo(this)) {
            startService(new Intent(BootService.this, MainService.class));
        }
    }, 1000);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // service On start
    return START_STICKY;

  ...
 }

}

主要服务应该是这种方式

public class MainService extends JobIntentService {