Невозможно отобразить изображение контактных данных в телефонной зазоре

Я пытаюсь получить профиль контакта pic, т.е. аватар контактных данных, используя следующий код в PhoneGap для android но я получаю следующий url взамен, и я не знаю, как мне показать его в теге img.

Код

var defaultImagePath ='../resources/images/default_usr.png'
 var img = contacts[i].photos != null ? 
 contacts[i].photos[0].value : defaultImagePath;

return url

Содержание://com.android.contacts/contacts/739/photo

теперь, когда в конечном итоге в списке я пытаюсь показать его с помощью

но его ничего не отображает? так как я могу показать контактное изображение?

У меня есть последняя версия PhoneGap

Я использовал

window.resolveLocalFileSystemURI(контакты [i].photos [0].value, this.onResolveSuccess, this.fail);

но я получаю следующую ошибку времени выполнения

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

хотя я указал следующие разрешения в android

<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></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission>

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);
 }

здесь находится функция изображения

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;
};
3 ответа

Я столкнулся с этим вопросом несколько дней назад и, наконец, нашел обходное решение.

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;
}


Пожалуйста, попробуйте это.

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);
 }


рядом с AndroidManifest.xml, есть разрешение 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">
 ...
 </plugin></plugin></plugin></plugin></plugin></plugin></plugins>

пожалуйста, проверьте, что если все разрешения предоставлены для JNI ERROR, эта ошибка может быть ошибкой разрешения.

Для изображения убедитесь, что идентификатор контакта 739 имеет настройку изображения, так как функция get_contact phonegap всегда возвращает формат URL-адреса, например content://com.android.contacts/contacts/XXX/photo, где XXX является идентификатором контакта, независимо от того, какое изображение установлено или нет.

Как я тестирую с помощью phonegap 2.5 на Android 4, - это работа, контактное изображение или маленькая синяя квадратная с вопросом-отметка внутри, если uri не содержит изображения

licensed under cc by-sa 3.0 with attribution.