मैंने एक ऐसे ऐप से ऐसा कुछ किया है जिसमें गतिविधि और सिंक सेवा है। आप वास्तव में demo here में बहुत सारी कार्यक्षमता देख सकते हैं। यह डेमो सेवा सेवा का उपयोग नहीं करता है, लेकिन विचार वही रहता है।
1/init() विधि के साथ एक सिंगलटन क्लास (GDAA) बनाएं जो आपके गतिविधि संदर्भ को स्वीकार करता है। यह init()
एक स्थानीय स्थैतिक GoogleApiClient
को तुरंत चालू करेगा जो तब तक जीवित रहता है जब तक आपको खातों को स्विच करने की आवश्यकता नहीं है (बाद में समझाया गया)।
init()
को शुरुआत में एक गतिविधि संदर्भ के साथ कहा जाता है या जब किसी अन्य उपयोगकर्ता खाते (विभिन्न उपयोगकर्ता के लिए अलग GooDrive) पर स्विच करने की आवश्यकता होती है। गतिविधि इसके संदर्भ में गुजरती है और onConnFail(), onConnOK()
कॉलबैक की आपूर्ति करती है।
पूर्णता के लिए, कनेक्शन बाधित होने पर onConnectionSuspended()
के लिए भी प्रावधान होना चाहिए (WIFI/CELL कनेक्शन ड्रॉप नहीं, लेकिन GooPlaySvcs निलंबन)।
onConnFail()
कॉलबैक प्रमाणीकरण/प्राधिकरण जिसका परिणाम onActivityResult()
में वापस आता है के लिए GooPlaySvcs को नियंत्रण से गुजरता है। फिर से कनेक्ट करें, धोएं, कुल्लाएं, दोहराएं ...
onConnOK()
कॉलबैक आपकी गतिविधि को बताता है कि सबकुछ तैयार है।
जैसा कि मैंने कहा, यदि आप के लिए एक नए खाते के लिए एक नया GoogleApiClient
बनाने के लिए कई GooDrive खातों संभाल फिर init()
फोन करना होगा। बस 'REQ_ACCPICK' निशान here का पालन करें। आपको खाता प्रबंधक 'एएम' कक्षा here में देख सकते हैं जैसा कि आप अपने खाते को प्रबंधित करना होगा। इस नृत्य का अधिकांश MainActivity में देखा जा सकता है।
पूर्णता के लिए, मुझे यह भी उल्लेख करना चाहिए कि GoogleApiClient.Builder()
में setAccountName(email)
को छोड़कर और खाता पिकिंग रीसेट करने के लिए clearDefaultAccountAndReconnect()
का उपयोग करके आप GooPlaySvcs पर खाता प्रबंधन छोड़ सकते हैं। लेकिन आपका ऐप नहीं जानता कि वर्तमान उपयोगकर्ता कौन है। फिर भी एक और खाता प्रबंधन प्लसएपी के माध्यम से संभाला जा सकता है (या जिसे भी कहा जाता है, कभी इसका इस्तेमाल नहीं किया जाता है)। लेकिन मैं पीछे हटा।
2/जब प्रारंभ किया जाता है और निजी स्थिर GoogleApiClient mGAC
में गैर-शून्य है और जुड़ा हुआ है, GDAA स्थिर तरीकों कहीं से भी अपने अनुप्रयोग में, संदर्भित किया जा सकता एक सेवा भी शामिल है। GoogleApiClient जीवित नहीं है या कनेक्ट नहीं है, तो विधियां निश्चित रूप से विफल हो जाएंगी।
यहां वर्णित डेमो में, सभी जीडीएए कॉल 'प्रतीक्षा()' (सिंक) स्वाद के हैं। यदि कोई गैर-UI थ्रेड से सेवा की तरह कहा जाता है तो यह कोई समस्या नहीं है। वे आसानी से इस उदाहरण की तरह async संस्करणों में बदल सकता है:
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
}
}
});
स्वाद आप अनुप्रयोग की जरूरत है (बनाम async प्रसंस्करण भस्म वापसी मूल्यों के साथ स्पेगेटी कोड) पर निर्भर करता है।
यह उल्लेख किया जाना चाहिए कि यह डेमो एपी के GDAA संस्करण का उपयोग करता है। एक REST Api है साथ ही इसे उसी तरह से संभाला जा सकता है (सिंक स्वाद केवल)। एक वैकल्पिक डेमो जो वास्तव में एक ही तर्क और विधियों का उपयोग करता है here उपलब्ध है। आप दोनों को
com.google.api.services.drive.Drive
और com.google.android.gms.common.api.GoogleApiClient
दोनों के साथ एक सिंगलटन कक्षा में भी जोड़ सकते हैं।
हालांकि जीडीएए और आरईएसटी एपीआई को मिश्रण करना खतरनाक है, क्योंकि आप निश्चित रूप से समय के मुद्दों में भाग लेंगे क्योंकि जीडीएए अपने स्वयं के कार्यक्रम पर सिंक्रनाइज़ करता है, जबकि आरईएसटी आपके नियंत्रण में है।
यह मदद की उम्मीद है, गुड लक
करता है आपका ऐप्लिकेशन है गूगल प्लस के लिए लॉग इन –
@war_Hero: उम, लॉगिन Google डिस्क API ने उकसाया जा करने के लिए माना जाता है। यह मेरे प्रश्न का एक बिंदु है - गतिविधि के संदर्भ के बाहर से साफ तरीके से इसे कैसे संभालना है। –
कारण मैंने पूछा कि क्या आपके पास जी + लॉगिन है या नहीं, फिर पुनः-लेखक की आवश्यकता नहीं है –