2013-05-31 64 views
-1

我想發送一個JSON對象和相關的縮略圖到Google+。但是我無法使其正常工作。我得到的,例如,響應:發送JSON數據到谷歌Plus

05-30 22:38:16.819: E/AndroidRuntime(11643): FATAL EXCEPTION: main 
05-30 22:38:16.819: E/AndroidRuntime(11643): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SEND typ=application/json flg=0x80000 pkg=com.google.android.apps.plus (has extras) } 
05-30 22:38:16.819: E/AndroidRuntime(11643): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1409) 

告訴我了Google+庫目前還沒有找到處理「application/json」 MIME類型的正確方法。我的代碼(相關部分)運行,這樣的(我獲得大部分來自the Google+ examples):

PlusShare.Builder builder = new PlusShare.Builder(this, plusClient); 

// Set call-to-action metadata. 
builder.addCallToAction("VIEW_ITEM", callToActionUrl, callToActionDeepLinkId); 
File thumbnailFile = generateThumbnail(); 
builder.setStream(Uri.fromFile(outputJSON())); 
builder.setType("application/json"); 
thumbnailFile!=null?Uri.fromFile(thumbnailFile):null); 

,如果我避免流設置爲JSON類型,它似乎是工作良好。我生成JSON是這樣的:

{"INSTRUMENTS": 
     [{"MINOR":false,"CHANNEL":0,"MAJOR":false,"HIGH_RANGE":-8012206, 
     "PROGRAM":1,"MAX_KEY":70,"NOTE_LENGTH":150,"LOW_RANGE":-16217748, 
     "MIN_VELOCITY":60,"MIN_KEY":40}, 
     {"MINOR":false,"CHANNEL":2,"MAJOR":true,"HIGH_RANGE":-2790500, 
     "PROGRAM":8,"MAX_KEY":90,"NOTE_LENGTH":150,"LOW_RANGE":-12114977, 
     "MIN_VELOCITY":60,"MIN_KEY":70}]} 

我已經看到了不同的API,告訴如何發送JSON對象像這樣使用位圖,什麼具備的,你,但Android的API單證稍...疏。誰知道我可以如何設法在Android中做同樣的事情?

在理想情況下,一旦正確完成,後應包含:

  1. 的圖像的指紋
  2. 當用戶點擊從Android設備後其,
  3. JSON數據,將被使用的我的通過用戶
+0

你能發表更完整的代碼嗎?它不清楚你如何定義你的「建造者」變量。另外,你能否指出你希望得到的帖子看起來像 - 即。你打算如何處理application/json mime類型的Google+? – Lee

+0

@Lee:我添加了顯示構建器實例的代碼。我還補充說明了我正在努力完成的事情。 – DigCamara

回答

2

您不能附加圖片或JSON數據的互動信息,寫好深聯

  • 文/標題的應用程序。所以你的問題沒有簡單的答案。

    一個選擇是使用普通帖子而不是交互帖子來共享這樣的縮略圖 - http://googleplusplatform.blogspot.co.uk/2012/05/sharing-rich-content-from-your-android.html,但是您將無法將JSON數據附加到該帖子中。

    使用交互式帖子的第二種替代方法是設置公開可見的URL,該帖子的內容是builder.setContentUrl(Uri)。如果您創建包含以下內容,例如頁面:

    <body itemscope itemtype="http://schema.org/WebPage"> 
    
    <div itemscope itemtype="http://schema.org/Thing"> 
    
    <img itemprop="image" src="http://example.com/path/to/thumbnail.jpg" /> 
    <span itemprop="name">Name of your thing</span> 
    
    <div class="data">{"INSTRUMENTS": 
        [{"MINOR":false,"CHANNEL":0,"MAJOR":false,"HIGH_RANGE":-8012206, 
        "PROGRAM":1,"MAX_KEY":70,"NOTE_LENGTH":150,"LOW_RANGE":-16217748, 
        "MIN_VELOCITY":60,"MIN_KEY":40}, 
        {"MINOR":false,"CHANNEL":2,"MAJOR":true,"HIGH_RANGE":-2790500, 
        "PROGRAM":8,"MAX_KEY":90,"NOTE_LENGTH":150,"LOW_RANGE":-12114977, 
        "MIN_VELOCITY":60,"MIN_KEY":70}]}</div> 
    
    </div> 
    </body> 
    

    ,並使其可在http://example.com/item1,那麼你將能夠創造一個互動的帖子是這樣的:

    PlusShare.Builder builder = new PlusShare.Builder(this, plusClient); 
    
    // Set call-to-action metadata. 
    builder.setContentUrl(Uri.parse("http://example.com/thing1")); 
    builder.addCallToAction("VIEW_ITEM", Uri.parse("http://example.com/thing1"), deepLinkId); 
    

    這意味着然而,你必須加載和解析頁面來檢索你的JSON數據,這可能會更好地託管在不同的URL。

    您可以將您的JSON數據放入deepLinkId本身,但要注意deepLinkId限制爲512個字符,因爲它無意攜帶數據 - 僅用於識別資源。

  • +0

    是的......那是我認爲我必須去的地方。你知道他們爲什麼有像'setStream()'和'setType()'這樣的方法嗎?他們對我來說似乎毫無用處。 – DigCamara

    +0

    我確定setStream和addStream旨在反映http://developer.android.com/reference/android/support/v4/app/ShareCompat.IntentBuilder.html中的使用情況,但它們似乎不起作用同樣的方式。 – Lee

    +0

    似乎喜歡它。我認爲你的回答是正確的,但由於沒有很好的官方文件能夠描述這種「真實」的方式,所以我將把問題留待一段時間。 – DigCamara

    0

    李的另一種方法可能會工作,但您可能會傳遞JSON數據作爲帖子的深度鏈接ID。您可能希望對數據進行base64編碼,將其用作深度鏈接ID,然後在捕獲傳入的深層鏈接時,對數據進行解碼並對其進行解析。

    您必須確保編碼的JSON數據不超過512個字符。當您編碼時,您當前的JSON片段以524個字符進來。

    byte[] data = jsonData.getBytes("UTF-8"); 
    String base64Json = Base64.encodeToString(data, Base64.DEFAULT); 
    
    if (base64.length() <= 512) { 
    Intent shareIntent = new PlusShare.Builder(this) 
         .setText("Lemon Cheesecake recipe") 
         .setType("text/plain") 
         .setContentDeepLinkId(base64Json, /** Deep-link identifier */ 
           "Lemon Cheesecake recipe", /** Snippet title */ 
           "A tasty recipe for making lemon cheesecake.", /** Snippet description */ 
           Uri.parse("http://example.com/static/lemon_cheesecake.png")) 
         .getIntent(); 
    
    startActivityForResult(shareIntent, 0); 
    } else { 
        // Do something different such as regular share, or try to get encoded length under 512 
    } 
    

    對於到您的應用程序的傳入鏈接,您將閱讀unncode此數據並使用它。您需要非常小心地驗證數據。