Tôi đã thực hiện điều gì đó tương tự từ một ứng dụng có Hoạt động và SyncService. Bạn thực sự có thể thấy rất nhiều chức năng trong số demo here. Bản trình diễn này không sử dụng dịch vụ, nhưng ý tưởng vẫn giữ nguyên.
1/Tạo một lớp đơn (GDAA trong trường hợp này) với phương thức init() chấp nhận ngữ cảnh hoạt động của bạn. Điều này init()
sẽ khởi tạo một địa phương tĩnh GoogleApiClient
mà vẫn còn sống miễn là bạn không cần phải chuyển đổi tài khoản (giải thích sau).
init()
được gọi với ngữ cảnh hoạt động khi bắt đầu hoặc khi cần chuyển sang tài khoản người dùng khác (GooDrive khác cho người dùng khác). Hoạt động chuyển vào ngữ cảnh của nó và cung cấp các cuộc gọi lại onConnFail(), onConnOK()
.
Vì mục đích hoàn chỉnh, cũng phải có quy định cho onConnectionSuspended()
trong trường hợp kết nối bị gián đoạn (không phải kết nối WIFI/CELL bị giảm, nhưng bị tạm ngưng GooPlaySvcs).
onConnFail()
gọi lại chuyển quyền kiểm soát cho GooPlaySvcs để xác thực/ủy quyền có kết quả trở lại trong onActivityResult()
. Kết nối lại, rửa, rửa lại, lặp lại ...
- Gọi lại
onConnOK()
cho biết hoạt động của bạn là mọi thứ đã sẵn sàng.
Như tôi đã chỉ ra, bạn sẽ phải gọi init()
một lần nữa nếu bạn xử lý nhiều tài khoản GooDrive để tạo ra một mới GoogleApiClient
cho một tài khoản mới. Chỉ cần đi theo đường dẫn 'REQ_ACCPICK' here. Bạn cũng sẽ phải quản lý tài khoản của mình như bạn có thể thấy trong trình quản lý tài khoản 'AM' lớp here. Hầu hết các điệu nhảy này có thể được nhìn thấy trong số MainActivity.
Để hoàn tất, tôi cũng nên đề cập rằng bạn có thể để quản lý tài khoản cho GooPlaySvcs bằng cách bỏ qua setAccountName(email)
trong GoogleApiClient.Builder()
và sử dụng clearDefaultAccountAndReconnect()
để đặt lại chọn tài khoản. Nhưng ứng dụng của bạn sẽ không biết ai là người dùng hiện tại. Tuy nhiên, quản lý tài khoản khác có thể được xử lý bằng phương tiện của PlusApi (hoặc bất cứ điều gì nó được gọi, không bao giờ được sử dụng nó). Nhưng tôi lạc đề.
2/Khi khởi tạo xong và static tĩnh GoogleApiClient mGAC
là không rỗng và được kết nối, các phương pháp tĩnh GDAA có thể được tham chiếu từ bất kỳ đâu trong ứng dụng của bạn, bao gồm dịch vụ. Các phương pháp chắc chắn sẽ thất bại nếu GoogleApiClient không hoạt động hoặc không được kết nối.
Trong bản trình diễn được đề cập ở đây, tất cả các cuộc gọi GDAA đều có hương vị 'chờ đợi()' (đồng bộ). Nó không phải là một vấn đề nếu chúng được gọi từ một chủ đề không phải UI như một dịch vụ. Chúng có thể dễ dàng được chuyển thành các phiên bản không đồng bộ như trong ví dụ này:
DriveFile df = ...;
// sync version
DriveContentsResult rslt = df.open(mGAC, DriveFile.MODE_READ_ONLY, null).await();
if ((rslt != null) && rslt.getStatus().isSuccess()) {
DriveContents cont = rslt.getDriveContents();
InputStream is = cont.getInputStream();
cont.discard(mGAC); // or cont.commit(); they are equiv if READONLY
}
// async version
df.open(mGAC, DriveFile.MODE_READ_ONLY, null).setResultCallback(
new ResultCallback<DriveContentsResult>() {
@Override
public void onResult(DriveContentsResult rslt) {
if ((rslt != null) && rslt.getStatus().isSuccess()) {
DriveContents cont = rslt.getDriveContents();
InputStream is = cont.getInputStream();
cont.discard(mGAC); // or cont.commit(); they are equiv if READONLY
}
}
});
Hương vị tùy thuộc vào nhu cầu của ứng dụng (mã spaghetti với giá trị trả lại tiêu thụ so với xử lý không đồng bộ).
Cần lưu ý rằng bản trình diễn này sử dụng phiên bản GDAA của Api. Có một REST Api cũng có thể được xử lý theo cùng một cách (chỉ có hương vị đồng bộ). Một bản trình diễn thay thế sử dụng chính xác cùng một logic và phương thức có sẵn here. Bạn thậm chí có thể kết hợp cả hai thành một lớp đơn với cả hai số
com.google.api.services.drive.Drive
và com.google.android.gms.common.api.GoogleApiClient
hiện tại. Tuy nhiên, rất nguy hiểm khi trộn GDAA và REST Api, vì bạn chắc chắn sẽ gặp phải các vấn đề về thời gian do GDAA đồng bộ hóa theo lịch riêng của nó, trong khi REST nằm dưới sự kiểm soát của bạn.
Hy vọng nó sẽ giúp, Good Luck
làm ứng dụng của bạn có google plus đăng nhập –
@war_Hero: um, tên đăng nhập là vụ phải được xúi giục bởi các API của Google Drive. Đó là loại điểm của câu hỏi của tôi - làm thế nào để xử lý một cách rõ ràng từ bên ngoài bối cảnh của một hoạt động. –
lý do y tôi hỏi là để biết nếu bạn có đăng nhập g + sau đó lại auth là không cần thiết –