2016-04-07 9 views
0

AndroidのCordova連絡先プラグインを使用してユーザーの連絡先に画像を保存するときに問題が発生しているようです。ここに私のコードです:Cordova連絡先プラグインを使用してユーザーの連絡先に画像を保存する

var contact = navigator.contacts.create(); 

// data.photo is a valid base64-encoded string. 
contact.photos[0] = { 
    "type": "base64", 
    "value": data.photo 
}; 

contact.save(function() { 
    alert(“Contact saved.”); 
} 

これは完全にiOS上で動作しますが、私は何を試してもAndroid上で画像を保存することはできません。 data.photoの値は、URLバーに貼り付けたときに画像として表示される有効なbase64エンコードされた文字列です。何かアドバイス?

答えて

0

この問題は、base64のタイプを保存できないという問題です。

あなたには、プロジェクトフォルダ内にある場所ContactAccessorSdk5.javaでbase64でのいかなる種類、「プラットフォーム/アンドロイド/ビルド/ SRC /組織/ apacheの/コルドバ/連絡先/ ContactAccessorSdk5.java」

がないことが判明することができます

画像データフォーマットのbase64は「data:」で始まります。したがって、 'ContactAccessorSdk5.java'ファイルのgetPathFromUri(String path)を変更して、画像データbase64を保存することができます。

あなたは 'https://groups.google.com/forum/#!msg/phonegap/jTMu9Azjaa8/ywQMMEcoS1YJ'

または以下の私のGitHubで参照することができます。

https://github.com/CordovaExam/Contacts

あなたがそこに着く場合は、より詳細な情報があるそれを得ることができます。

private InputStream getPathFromUri(String path) throws IOException { 

     if (path.startsWith("data:")) { // data:image/png;base64,[ENCODED_IMAGE] 
      String dataInfos = path.substring(0, path.indexOf(',')); // data:image/png;base64 
      dataInfos = dataInfos.substring(dataInfos.indexOf(':') + 1); // image/png;base64 
      String baseEncoding = dataInfos.substring(dataInfos.indexOf(';') + 1); // base64 
      if("base64".equalsIgnoreCase(baseEncoding)) { 
       String img = path.substring(path.indexOf(',') + 1); // [ENCODED_IMAGE] 
       byte[] encodedData = img.getBytes(); 
       ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(encodedData, 0, encodedData.length); 
       Base64InputStream base64InputStream = new Base64InputStream(byteArrayInputStream, Base64.DEFAULT); 
       return base64InputStream; 
      } else { 
       Log.w(LOG_TAG, "Could not decode image. The found base encoding is " + baseEncoding); 

      } 
     } 
     if (path.startsWith("content:")) { 
      Uri uri = Uri.parse(path); 
      return mApp.getActivity().getContentResolver().openInputStream(uri); 
     } 

     if (path.startsWith("http:") || path.startsWith("https:") || path.startsWith("file:")) { 

      URL url = new URL(path); 
      return url.openStream(); 
     } 
     else { 
      return new FileInputStream(path); 
     } 
    } 
関連する問題