2013-08-22 13 views
6

私はのandroid の連絡先の写真を取得しようとしていますが、私は次のURLを取得しています。それをimgタグで示してください。最終的にはリストに私はときphonegapに連絡先のデータイメージを表示できません

//com.android.contacts/contacts/739/photo今:

コード

var defaultImagePath ='../resources/images/default_usr.png' 

var img = contacts[i].photos != null ? 
    contacts[i].photos[0].value : defaultImagePath; 

は、URLが

あるコンテンツを返さそれを表示しようとしています

<img src="content://com.android.contacts/contacts/739/photo"/> 

でも、何も表示されませんか?どうすれば連絡先の画像を表示できますか?

私は

window.resolveLocalFileSystemURI(接点[I] .photos [0] .VALUE、this.onResolveSuccess、this.fail)を使用している最新バージョンPhoneGap

を有します。

しかし、私はアンドロイド

ここ
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.BROADCAST_STICKY" /> 

UPDATE

loadContacts:function(){ 



    var arr = []; 

    var filter = ["displayName", "name", "phoneNumbers","emails","addresses","photos"]; 
    var options = new ContactFindOptions(); 
    options.filter=""; 
    options.multiple=true;  

    navigator.contacts.find(filter, 
       function(contacts) { 

       for (var i = 0; i < contacts.length; i++) { 
        if (contacts[i].photos) { 


        for (var j = 0; j < contacts[i].photos.length; j++) { 



           returnValidPhoto(contacts[i].photos[j], function(answer) { 

             console.log(answer); 

             if(contacts[i].photos[j]!=null); 
             contacts[i].photos[j].value=answer; 


            }); 




           var contactData = new ContactData("Name" , 
                "09090909", 
                contacts[i].photos[j].value); 

           arr.push(contactData); 




        } 
       } 

      } 
      Ext.getStore('ContactStore').setData(arr); 

       // document.getElementById("contactdata").innerHTML = data; 
      }, function(err) { 
       alert(err); 
       },options); 



    } 

に次の権限を指定しているにもかかわらず、次の実行時エラーに

JNI ERROR (app bug): attempt to use stale local reference in phonegap 

を取得しています画像機能です

function returnValidPhoto(url,callback){ 

    console.log("IMAGE CALLED"); 
    var img = new Image(); 
    img.onload = function() { 
    //Image is ok 

     console.log("IMAGE OK"); 

     callback(url.value); 
    }; 
    img.onerror = function(err) { 
     //Returning a default image for users without photo 

       console.log("IMAGE FAILED"); 

     url.value = "/resources/images/default_usr.png"; 
     callback("/resources/images/default_usr.png"); 
    } 
    img.src = url.value; 
}; 
+0

これを解決しましたか?私は同じ問題を抱えています、連絡先の画像が表示されていません... –

答えて

1

これを試してください。 AndroidManifest.xmlを横に

 function onDeviceReady() { 
      window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail); 
      window.resolveLocalFileSystemURI("content://com.android.contacts/contacts/739/photo", onResolveSuccess, fail); 
     } 

     function onFileSystemSuccess(fileSystem) { 
      console.log(fileSystem.name); 
     } 

     function onResolveSuccess(fileEntry) { 
      console.log(fileEntry.name); 
     } 

     function fail(evt) { 
      console.log(evt.target.error.code); 
     } 
+0

私は上記のコードを使用する場合、私は次のエラーが発生しています 'JNIエラー(アプリのバグ):電話のギャップで古いローカル参照を使用しようと'編集 – Hunt

+0

こんにちはあなたはAndroidMainfeast.xmlで –

+0

また、デバッグ可能=デバッグ可能ですが、結果は同じですか? –

0

、PhoneGapの許可がproject\res\xml\config.xml

<plugins> 
    <plugin name="App" value="org.apache.cordova.App"/> 
    <plugin name="Device" value="org.apache.cordova.Device"/> 
    <plugin name="Camera" value="org.apache.cordova.CameraLauncher"/> 
    <plugin name="Contacts" value="org.apache.cordova.ContactManager"/> 
    <plugin name="File" value="org.apache.cordova.FileUtils"/> 
    <plugin name="Storage" value="org.apache.cordova.Storage"/> 
    ... 
    </plugins> 

であり、すべての許可がJNIエラーのために付与されている場合も、そのエラーは許可エラーであることを確認してください。画像については

<img src="content://com.android.contacts/contacts/739/photo"/>はPhoneGapのget_contact機能は、常に関係なく設定するか、またはされていないものを、画像、XXXが接触IDですcontent://com.android.contacts/contacts/XXX/photoのようなURL形式を返さないので、コンタクトID 739は、画像のセットアップを持っていることを確認してください。

私はアンドロイド4上のPhoneGap 2.5でテストとして、<img src="content://com.android.contacts/contacts/739/photo"/>はURIが画像

+0

それは今働いていますが、私は持っています。ヌルとイメージを区別する問題、そのプラグインの唯一の選択肢ですか? – Hunt

+0

はい、私の知る限りです。 – Hardy

2

が含まれていない場合は仕事、連絡先の画像や小青平方と-疑問符-内部で私が出会いました数日前にこの問題が発生し、最終的に回避策が見つかりました。

var returnValidPhoto=function(url,callback){ 
    var img = new Image(); 
    img.onload = function() { 
    //Image is ok 
     callback(url); 
    }; 
    img.onerror = function(err) { 
     //Returning a default image for users without photo 
     callback("image_for_no_avatar.png"); 
    } 
    img.src = url; 
}; 

//Example usage 
returnValidphoto(contact.photos[0].value, function(answer) { 
    contact.photos[0].value=answer; 
} 
+0

私は 'contact.photos [0] .value = answer;'エラーを取得しています 'cantはプロパティ '未定義の写真'を読み取っています – Hunt

+0

これも定義されているかどうかチェックしてください。 。 – jdponomarev

+0

私の場合、navigator.contacts.findを実行した後、新しい配列の "validContacts"を作成しています。電話番号や名前を付けずにすべてのものをフィルタリングし、デフォルト設定の写真 – jdponomarev

関連する問題