2016-04-12 9 views
7

मैं अपने ऐप को Google फिट से कनेक्ट करने का प्रयास कर रहा हूं। मैं एक इरादा सेवा का उपयोग कर रहा हूं जिसे निम्नलिखित चीजों को करने की आवश्यकता है। जब मुझे चरणों के बारे में जानकारी मिलती है तो शुरू हो जाता है। इस बिंदु पर मैं निम्नलिखित कोड को फोन करके GoogleApiClient बनाने के लिए कोशिश कर रहा हूँ:एंड्रॉइड ऐप में पृष्ठभूमि में GoogleFit को संभालें

mClient = new GoogleApiClient.Builder(this) 
     .addApi(Fitness.HISTORY_API) 
     .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE)) 
     .addScope(new Scope(Scopes.FITNESS_LOCATION_READ_WRITE)) 
     .addConnectionCallbacks(
      new GoogleApiClient.ConnectionCallbacks() { 
       @Override 
       public void onConnected(Bundle bundle) { 
        log.info("FITNESS_API: Connected!!!"); 
        Thread thread = new Thread(new Runnable() { 
        @Override 
        public void run() { 
         insertOrUpdateDataPoints(); 
        } 
        }); 

        thread.start(); 
       } 

       @Override 
       public void onConnectionSuspended(int i) { 
        // If your connection to the sensor gets lost at some point, 
        // you'll be able to determine the reason and react to it here. 
        if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST) { 
        log.info("FITNESS_API: Connection lost. Cause: Network Lost."); 
        } else if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_SERVICE_DISCONNECTED) { 
        log.info("FITNESS_API: Connection lost. Reason: Service Disconnected"); 
        } 
       } 
      } 
    ).build(); 

mClient.connect(); 

एक डेटासेट बनाने और डाटापॉइंट elemnets के रूप में दिए गए चरणों का विवरण जोड़ने के बाद, मैं Google फिट से जानकारी सिंक और साथ GoogleApiClient बंद:

com.google.android.gms.common.api.Status insertStatus = 
    Fitness.HistoryApi.insertData(mClient, dataSet).await(1, TimeUnit.MINUTES); 

    // Before querying the data, check to see if the insertion succeeded. 
    if (!insertStatus.isSuccess()) { 
    log.info("FITNESS_API: There was a problem inserting the dataset. Status = " + insertStatus.getStatusCode()); 
    } 

    mClient.disconnect(); 
    mClient = null; 

समस्या अपने दम पर GoogleApiClient (enableAutoManage के बिना) का प्रबंधन करने की कोशिश कर रहा द्वारा, मैं ऐप Google फिट करने के लिए डेटा पोस्ट करने के लिए अनुमति देने का संकेत नहीं मिलता है। अगर मैं GoogleApiClient बनाते समय enableAutoManage का उपयोग करता हूं तो यह व्यवहार बदलता है। हालांकि, क्लाइंट के लिएऑटोमैनेज को सक्षम करने के लिए, मुझे enableAutoManage द्वारा आवश्यक पैरामीटर के कारण एक गतिविधि फ़्रेगमेंट होना आवश्यक है। मुझे IntentyService में एक गतिविधिफ्रैगमेंट तक पहुंच नहीं है और मैं क्लाइंट के प्रबंधन को रखना चाहता हूं और सम्मिलित कार्रवाई को एक अलग सेवा में रखना चाहता हूं जो पृष्ठभूमि में चल सकता है।

साथ ही जब मैं enableAutoManage का उपयोग नहीं करता हूं, भले ही मैंने GoogleApiClient के लिए कनेक्ट कॉलबैक पंजीकृत किया हो, कुछ भी नहीं होता है।

मैं कैसे सुनिश्चित कर सकता हूं कि मेरा एप्लिकेशन उपयोगकर्ता को Google फिट पर पोस्ट करने की अनुमति देने के लिए प्रेरित करता है? मुझे ऐसा होने की ज़रूरत है यदि उपयोगकर्ता को ऐप खोलने पर ऐप को Google फिट में पोस्ट करने की अनुमति नहीं है। कोई विचार? धन्यवाद।

उत्तर

1

मुझे समाधान मिला है।

आप "enableAutoManage" का उपयोग नहीं करना चाहते हैं, तो आप इस तरह विधि onConnectionFailed रजिस्टर करने की आवश्यकता:

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 
    if(!authInProgress) { 
     try { 
      authInProgress = true; 
      connectionResult.startResolutionForResult(MainActivity.this, REQUEST_OAUTH); 
     } catch(IntentSender.SendIntentException e) { 

     } 
    } else { 
     Log.e("GoogleFit", "authInProgress"); 
    } 
} 

इस संवाद को पेश करेंगे।

0

आपकी मंशा सेवा में @Vlad द्वारा उल्लिखित उपर्युक्त विधि का उपयोग करें। एक अधिसूचना बनाएं (चिपचिपा या अन्यथा आपके महत्व के आधार पर) उपयोगकर्ता को अनुमति देने पर आपको अनुमति देने के लिए कहा गया है। अधिसूचना उपयोगकर्ता को उस गतिविधि पर रीडायरेक्ट करेगी जहां आप उपयोगकर्ता को फिर से फिटका देने के लिए कहते हैं।

0
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
     case REQUEST_OAUTH: 
      if (resultCode != Activity.RESULT_OK) { 
       return; 
      } 

      if (!googleApiClient.isConnected()) { 
       googleApiClient.connect(GoogleApiClient.SIGN_IN_MODE_OPTIONAL); 
      } else { 
       readDataTask(); 
      } 
      return; 
     case RC_SIGN_IN: 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      if (result.isSuccess()) { 
       GoogleSignInAccount account = result.getSignInAccount(); 
       String email = account.getEmail();//you can get OAuth user's email AT THIS POINT. 

       if (GoogleFitService.googleApiClient.isConnected()) { 
        readDataTask(); 
       } 
      } 
    } 
} 

पहली बार आपको क्या करना है ओथ गुओल accout है, तो अपना ईमेल प्राप्त करें।

gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .setAccountName("user's email") 
       .requestScopes(
         new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE), 
         new Scope(Scopes.FITNESS_BODY_READ_WRITE), 
         new Scope(Scopes.FITNESS_NUTRITION_READ_WRITE), 
         new Scope(Scopes.FITNESS_LOCATION_READ_WRITE)) 
       .build(); 

जब आपको पृष्ठभूमि में Google फिट डेटा मिलता है, तो आपको ईमेल सेट करने की आवश्यकता होती है।

संबंधित मुद्दे