Ücretsiz APK oluştur

JavaScript köprü API'si

Titreşim ve ses

Dokunsal geri bildirim, her başıboş dokunuşta değil anlamsal olaylarınızda tetiklenen uygulamanın kendi tık sesi ve oluşturucunun derleme sırasında seçtiği arka plan müziği parçası - uygulama hiçbirini taşımıyorsa getMusicVolume -1 döndürür; böylece bir ayarlar ekranı ölü bir kaydırıcı göstermek yerine onu gizleyebilir.

navigator.vibrate web standardı#

navigator.vibrate(pattern)

Örnek

Telefonu normal web Titreşim API'siyle titretir. Android WebView'in kendi navigator.vibrate işlevi motoru asla çalıştırmaz; uygulama onu belge başlangıcında değiştirir ve böylece gerçekten titrer.

Döndürür: istek kabul edildiğinde true, geçersiz girdi için (negatif veya sayı olmayan süre) false. Gerekir: derleme yaparken Adım 4'te (Erişim) Titreşim seçeneğini açın. Yapay zekayla oluşturulan uygulamalarda kod titrettiğinde bu sizin için açılır.

function buzz(pattern) {
  if ('vibrate' in navigator) navigator.vibrate(pattern);
}

document.getElementById('save').addEventListener('click', function () {
  buzz(30);                    // one short buzz, 30 ms
});

document.getElementById('wrong').addEventListener('click', function () {
  buzz([80, 40, 80]);          // buzz 80, pause 40, buzz 80
});

document.getElementById('alarm-off').addEventListener('click', function () {
  buzz(0);                     // 0 or [] stops a running vibration
});

Hatalı bir süreyi, örneğin kullanıcının yazdığı bir süreyi yakalamak için dönüş değerini kullanın:

document.getElementById('test-buzz').addEventListener('click', function () {
  var ms = parseInt(document.getElementById('buzz-ms').value, 10);   // '' gives NaN
  if (!('vibrate' in navigator)) return;
  if (!navigator.vibrate(ms)) {
    showError('Enter a duration of 0 ms or more.');
  }
});

Çek-yenile hareketi, bırakınca yenilenecek noktayı geçtiğinde tek bir kısa tık:

var armed = false;
var list = document.getElementById('feed');

list.addEventListener('touchmove', function () {
  var ready = list.scrollTop <= 0 && pullDistance() > 80;
  if (ready && !armed && 'vibrate' in navigator) navigator.vibrate(15);
  armed = ready;
}, { passive: true });

list.addEventListener('touchend', function () {
  if (armed) refreshFeed();
  armed = false;
});

Notlar:

  • Desen webdeki desendir: ilk sayı bir titreşimdir, sonra duraklama, titreşim, duraklama ... (uygulama bunu Android için dönüştürür).
  • Derlerken Titreşim açılmadıysa çağrı yine true döndürür ama telefon titremez.
  • Ondalık sayılar aşağı yuvarlanır. Dizide negatif sayılar 0 sayılır.
  • Masaüstü tarayıcıda navigator.vibrate bulunmayabilir; bu yüzden 'vibrate' in navigator denetimini koruyun.

cancelVibrate köprü#

window.WebToApk.cancelVibrate()

Sayfa için basit dokunsal geri bildirim (navigator.vibrate ve bir desen biçimi). Derleme Titreşim iznini etkinleştirmediyse ikisi de yok sayılır.

Tek başına değil, grubu olan Titreşim altında açıklanır.

Örnek

Hâlâ süren bir titreşimi durdurur. Çoğu sayfa, bunu sizin için çağıran standart navigator.vibrate(0) kullanır.

Döndürür: hiçbir şey. Gerekenler: derleme sırasında 4. Adım'da (Erişim) Titreşim seçeneğini açın.

Standart yöntem:

if ('vibrate' in navigator) navigator.vibrate(0);   // or navigator.vibrate([])

Ham çağrı; örneğin kullanıcı "Kapat"a dokunduğunda uzun bir alarm desenini durdurmak için:

if (window.WebToApk && window.WebToApk.vibratePattern) {
  window.WebToApk.vibratePattern(JSON.stringify([1000, 500, 1000, 500, 1000]));
}

document.getElementById('dismiss').addEventListener('click', function () {
  if (window.WebToApk && typeof window.WebToApk.cancelVibrate === 'function') {
    window.WebToApk.cancelVibrate();
  }
});

Kullanıcı ekrandan ayrıldığında çalışan titreşimi durdurun; böylece telefon cebinde titremeye devam etmez:

document.addEventListener('visibilitychange', function () {
  if (!document.hidden) return;
  if (window.WebToApk && typeof window.WebToApk.cancelVibrate === 'function') {
    window.WebToApk.cancelVibrate();
  }
});

Notlar: Hiçbir şey titreşmiyorken çağırmak güvenlidir.

getMusicVolume köprü#

window.WebToApk.getMusicVolume(): Int

Geçerli düzey 0..100, bu uygulama arka plan müziği içermiyorsa -1.

Örnek

Uygulamanın döngüde çalan arka plan müziğinin seviyesini 0 ile 100 arasında okur.

Döndürür: eşzamanlı bir sayı: 0-100 veya bu uygulama müzik dosyası olmadan derlendiyse -1. Gerekir: derleme yaparken Adım 3'te (Entegre et), Görünüm Seçenekleri altında Arka Plan Müziği bölümünden seçilen bir dosya.

Müzik kaydırıcısını yalnızca müzik varsa gösterin:

var slider = document.getElementById('music-slider');
var level = -1;
if (window.WebToApk && typeof window.WebToApk.getMusicVolume === 'function') {
  level = window.WebToApk.getMusicVolume();
}

if (level < 0) {
  slider.parentNode.hidden = true;          // no music in this app: hide the setting
} else {
  slider.value = level;
  slider.addEventListener('input', function () {
    window.WebToApk.setMusicVolume(parseInt(slider.value, 10));
  });
}

Sesi açınca kullanıcının kendi seviyesine dönen bir sessize alma düğmesi (uygulama 0 değerini de hatırlar, bu yüzden eski seviyeyi kendiniz tutun):

function musicLevel() {
  return window.WebToApk && typeof window.WebToApk.getMusicVolume === 'function'
    ? window.WebToApk.getMusicVolume() : -1;
}
var muteBtn = document.getElementById('mute');

function paint() {
  var v = musicLevel();
  muteBtn.hidden = v < 0;
  muteBtn.textContent = v === 0 ? 'Unmute' : 'Mute';
}

muteBtn.addEventListener('click', function () {
  var v = musicLevel();
  if (v < 0) return;
  if (v > 0) {
    try { localStorage.setItem('musicBefore', String(v)); } catch (e) {}
    window.WebToApk.setMusicVolume(0);
  } else {
    var back = 40;
    try { back = parseInt(localStorage.getItem('musicBefore') || '40', 10); } catch (e) {}
    window.WebToApk.setMusicVolume(back);
  }
  paint();
});
paint();

Müziği mevcut seviyesinden yeni bir seviyeye yumuşakça geçirin; örneğin bir diyalog sahnesinin altında:

function fadeMusicTo(target, ms) {
  if (!window.WebToApk || typeof window.WebToApk.getMusicVolume !== 'function') return;
  var start = window.WebToApk.getMusicVolume();
  if (start < 0 || start === target) return;
  var steps = 10, i = 0;
  var t = setInterval(function () {
    i++;
    window.WebToApk.setMusicVolume(Math.round(start + (target - start) * i / steps));
    if (i === steps) clearInterval(t);
  }, ms / steps);
}

fadeMusicTo(10, 800);     // dim under the dialogue
// later: fadeMusicTo(60, 800);  the last level set is the one kept for the next launch

Notlar: Derleme kaydırıcısıyla veya son setMusicVolume çağrınızla ayarlanan düzeyi döndürür. Başka bir uygulama ya da bir çağrı sesi devraldığında müzik kendiliğinden kısılır veya duraklar; okuduğunuz sayı değişmez.

getVolume köprü#

window.WebToApk.getVolume(stream: String): String

Tek bir akışın düzeyi: JSON dizesi olarak `{stream, current, max, percent, muted}`. stream: 'media' | 'alarm' | 'ring' | 'notification' | 'call'.

Örnek

Telefonun kendi ses düzeylerinden birini okur.

Döndürür: eşzamanlı bir JSON dizesi: {"stream":"alarm","current":5,"max":7,"percent":71,"muted":false} - current/max telefonun kendi adımlarıdır (telefondan telefona değişir), percent 0-100'dür. stream, 'media', 'alarm', 'ring', 'notification' veya 'call' olur; başka bir ad {"error":"unknown_stream"} verir. Gerekir: hiçbir şey.

function warnIfAlarmSilent() {
  if (!(window.WebToApk && window.WebToApk.getVolume)) return;
  const v = JSON.parse(WebToApk.getVolume('alarm'));
  if (!v.error && v.percent === 0) {
    showMessage('Your alarm volume is off, so the alarm will not be heard.');
  }
}
warnIfAlarmSilent();

Ayarlar ekranında tüm düzeyleri gösterin:

['media', 'alarm', 'ring', 'notification'].forEach(function (s) {
  const v = JSON.parse(WebToApk.getVolume(s));
  document.getElementById('vol-' + s).value = v.percent;
});

Bir ses ayarlayın ve sonucu okuyun. setVolume(stream, percent, showUi) bir JSON dizesiyle yanıt verir.

function setAlarmVolume(percent) {
  if (!(window.WebToApk && WebToApk.setVolume)) return;
  const r = JSON.parse(WebToApk.setVolume('alarm', percent, true));
  if (!r.ok) showMessage('Could not change the volume: ' + r.error);   // fixed_volume, muted, ...
  else document.getElementById('vol-alarm').value = r.percent;
}

playClick köprü#

window.WebToApk.playClick()

Uygulamanın dokunma sesini isteğe bağlı çalar; böylece bir sayfa onu her gelişigüzel dokunuşta değil, KENDİ anlamlı olaylarında (bir düğme basışı) tetikleyebilir - yerel bir uygulama gerçekte bunu yapar ve clickSoundMode "off" iken bunun yine de çalışmasının nedeni budur. Yalnızca uygulama dokunma sesi OLMADAN derlendiyse (enableClickSound kapalı) hiçbir şey yapmaz. clickSoundMode "off" iken - otomatik her-dokunuş sesi yok - açık bir çağrı yine de çalar: bu mod kendi olaylarında ses çıkaran uygulamalar içindir. Aksi halde oluşturucunun yapılandırdığı geri bildirimi çalar.

Örnek

Uygulamanın dokunma sesini bir kez çalar; böylece kendi düğmeleriniz yerel bir uygulama gibi tıklayabilir.

Döndürür: hiçbir şey. Gerekir: derleme yaparken Adım 3'te (Entegre et), Görünüm Seçenekleri altındaki Dokunma Sesi anahtarı (varsayılan olarak açık). Anahtar kapalıyken bu hiçbir şey yapmaz.

function clickSound() {
  if (window.WebToApk && typeof window.WebToApk.playClick === 'function') {
    window.WebToApk.playClick();
  }
}

document.querySelectorAll('button, .tab').forEach(function (el) {
  el.addEventListener('click', clickSound);
});

Tüm bir oyun tahtası için tek bir dinleyici, yalnızca bir şey yapan dokunuşta tıklayarak:

document.getElementById('board').addEventListener('click', function (e) {
  var cell = e.target.closest('.cell');
  if (!cell || cell.classList.contains('taken')) return;   // a dead tap stays silent
  if (window.WebToApk && typeof window.WebToApk.playClick === 'function') {
    window.WebToApk.playClick();
  }
  placeMark(cell);
});

Derleme ayarının üstüne, kullanıcılarınıza kendi "Sesler" anahtarlarını verin:

var toggle = document.getElementById('sounds-toggle');
var soundsOn = true;
try { soundsOn = localStorage.getItem('sounds') !== 'off'; } catch (e) {}
toggle.checked = soundsOn;

toggle.addEventListener('change', function () {
  soundsOn = toggle.checked;
  try { localStorage.setItem('sounds', soundsOn ? 'on' : 'off'); } catch (e) {}
});

function tapSound() {
  if (soundsOn && window.WebToApk && typeof window.WebToApk.playClick === 'function') {
    window.WebToApk.playClick();
  }
}

Notlar: Duyduğunuz ses Dokunma sesi seçimine bağlıdır:

  • Telefon ayarını izle (önerilir): sistem tıkı. Kullanıcı telefon ayarlarında "Dokunma sesleri"ni kapattıysa sessizdir. Bu bilerek böyledir.
  • Her dokunuşta her zaman çal: uygulamanın kendi tık sesi, her zaman duyulur. Sayfadaki her dokunuş da tıklar, bu yüzden bu modda genellikle playClick() gerekmez.

Bir zamanlayıcıdan değil, gerçek bir düğme basışından çağırın.

requestDndAccess köprü#

window.WebToApk.requestDndAccess(): String

Rahatsız Etme açıkken zil / bildirim seviyesini değiştirmek için gereken Rahatsız Etme erişimi. "granted" | "opened" (ayarlar ekranı açıldı) | "not_declared".

Örnek

Rahatsız Etmeyin erişimi ister; Android, Rahatsız Etmeyin açıkken bir uygulamanın zil veya bildirim ses düzeyini değiştirebilmesi için bunu şart koşar (setVolume o zaman dnd_access_required yanıtını verir).

Döndürür: bir dize: 'granted' (zaten izinli), 'opened' (kullanıcının izin vereceği sistem ekranı açıldı - geri döndüklerinde yeniden kontrol edin) veya 'not_declared' (bu derleme izni taşımıyor, bu yüzden Android uygulamayı orada listelemez). Gerekir: uygulamanızın kodunda requestDndAccess çağırmak: derleme o zaman ACCESS_NOTIFICATION_POLICY iznini otomatik olarak bildirir.

function allowRingVolume() {
  if (!(window.WebToApk && window.WebToApk.requestDndAccess)) return;
  const r = WebToApk.requestDndAccess();
  if (r === 'opened') showMessage('Allow Do Not Disturb access for this app, then come back.');
  if (r === 'not_declared') showMessage('Turn off Do Not Disturb to change the ring volume.');
}

Kullanıcı erişime izin verdikten sonra ses değişikliğini bir kez daha deneyin:

function setRing(percent) {
  const r = JSON.parse(WebToApk.setVolume('ring', percent, true));
  if (r.ok || r.error !== 'dnd_access_required') return r;
  const a = WebToApk.requestDndAccess();     // 'granted' | 'opened' | 'not_declared'
  if (a === 'granted') return JSON.parse(WebToApk.setVolume('ring', percent, true));
  showMessage(a === 'opened' ? 'Allow access, then press the button again.' : 'Turn off Do Not Disturb first.');
  return r;
}

Zili bir "toplantı modu" anahtarıyla sessize alın ve işe yaramadığında nedenini söyleyin:

function meetingMode(on) {
  if (!(window.WebToApk && WebToApk.setVolume)) return;
  const r = JSON.parse(WebToApk.setVolume('ring', on ? 0 : 70, false));
  if (!r.ok && r.error === 'dnd_access_required') {
    const a = WebToApk.requestDndAccess();
    if (a === 'not_declared') showMessage('This build cannot change the ring volume while Do Not Disturb is on.');
  }
}

setMusicVolume köprü#

window.WebToApk.setMusicVolume(percent: Int)

Arka plan müziği düzeyini sayfadan, 0..100 arasında ayarlayın. Sihirbaz kaydırıcısı uygulamanın NASIL BAŞLAYACAĞINI belirler; bu ise bir uygulamanın kendi kullanıcılarına, ayarlar ekranı olan her oyunda beklenen müzik denetimini sunma yoludur. [BackgroundMusic.setVolume] içinde sınırlanır; böylece 500 veya -1 gönderen bir sayfa MediaPlayer'a kabul ettiği aralığın dışında bir kazanç veremez. Düzey HATIRLANIR: sonraki açılış sihirbazın düzeyiyle değil bununla başlar. Uygulama parçasız derlendiyse hiçbir şey yapmaz - ayarlanacak bir şey yoktur ve dürüst yanıt, sayfanın hiçbir şey yapmayan bir kaydırıcı göstermek yerine onu gizleyebilmesi için [getMusicVolume] işlevinin -1 döndürmesidir.

Örnek

Uygulamanın döngüdeki arka plan müziğinin düzeyini 0 ile 100 arasında değiştirir; örneğin oyununuzun ayarlar ekranından.

Döndürür: hiçbir şey. Gerekenler: derleme sırasında, Görüntü Seçenekleri altında, 3. Adım'da (Entegrasyon) Arka Plan Müziği bölümünde seçilmiş bir dosya. Müzik yoksa bu hiçbir şey yapmaz (şunun için getMusicVolume() değerine bakın: -1).

Bir sessize alma düğmesi - uygulama seviyeyi sonraki açılış için hatırlar:

function hasMusic() {
  return !!(window.WebToApk && window.WebToApk.getMusicVolume) && window.WebToApk.getMusicVolume() >= 0;
}

if (!hasMusic()) document.getElementById('mute').hidden = true;

document.getElementById('mute').addEventListener('click', function () {
  if (!hasMusic()) return;
  // clamped to 0..100 by the app, and kept for the next launch
  window.WebToApk.setMusicVolume(window.WebToApk.getMusicVolume() > 0 ? 0 : 40);
});

Ayarlar ekranında Kapalı / Düşük / Yüksek düğmeleri:

var LEVELS = { off: 0, low: 25, high: 70 };

document.querySelectorAll('[data-music]').forEach(function (btn) {
  btn.addEventListener('click', function () {
    if (!window.WebToApk || typeof window.WebToApk.setMusicVolume !== 'function') return;
    if (window.WebToApk.getMusicVolume() < 0) return;       // built without music
    window.WebToApk.setMusicVolume(LEVELS[btn.dataset.music]);
    markSelected(btn);
  });
});

Kendi videonuz oynarken müziği kısın, sonra eski düzeyine döndürün (düzey hatırlanır, bu yüzden her zaman geri yükleyin):

var video = document.getElementById('intro-video');
var before = -1;

video.addEventListener('play', function () {
  if (!window.WebToApk || typeof window.WebToApk.getMusicVolume !== 'function') return;
  before = window.WebToApk.getMusicVolume();
  if (before > 0) window.WebToApk.setMusicVolume(Math.round(before / 4));
});

function restoreMusic() {
  if (before > 0) window.WebToApk.setMusicVolume(before);
  before = -1;
}
video.addEventListener('pause', restoreMusic);
video.addEventListener('ended', restoreMusic);

Notlar: Ayarladığınız düzey kaydedilir: sonraki açılış, derleme kaydırıcısındaki düzey yerine bu düzeyle başlar (kullanıcı uygulamanın verilerini silene kadar). 0 müziği sessiz yapar ama çalmaya devam eder.

setVolume köprü#

window.WebToApk.setVolume(stream: String, percent: Double, showUi: Boolean): String

Bir akışı [percent] değerine (0-100) ayarlar; [showUi] telefonun ses kaydırıcısını gösterir. `{ok:true, stream, current, max, percent}` veya `{ok:false, error}` - error şunlardan biridir: unknown_stream | bad_percent | fixed_volume | dnd_access_required | muted | not_applied | failed | foreign_origin (uygulamanın kendi sitesi dışındaki bir sayfa).

Örnek

Telefonun kendi ses seviyelerinden birini 0-100 arasında ayarlar - örneğin bir uyandırma alarmı için alarm akışını yükseltmek veya bir müzik uygulamasındaki medya kaydırıcısı.

Döndürür: bir JSON dizesi: {"ok":true,"stream":"alarm","current":6,"max":7,"percent":86} veya {"ok":false,"error":"…"}; burada error şunlardan biridir: unknown_stream, bad_percent, fixed_volume (bu cihazda ayarlanabilir ses yok), dnd_access_required (Rahatsız Etmeyin açık ve zil / bildirim düzeyini engelliyor - bkz. requestDndAccess()), foreign_origin (uygulamanızın kendi sitesi dışındaki bir sayfa) veya failed. showUi: true telefonun kendi ses kaydırıcısını hareket ederken gösterir. Gerekenler: medya, alarm ve çağrı için hiçbir şey; zil ve bildirim için DND açıkken Rahatsız Etmeyin erişimi gerekebilir.

function setAlarmLoud() {
  if (!(window.WebToApk && window.WebToApk.setVolume)) return;
  const r = JSON.parse(WebToApk.setVolume('alarm', 80, true));
  if (!r.ok) showMessage('Could not change the alarm volume: ' + r.error);
}

document.getElementById('ring-slider').oninput = function (e) {
  const r = JSON.parse(WebToApk.setVolume('ring', Number(e.target.value), false));
  if (r.error === 'dnd_access_required' && WebToApk.requestDndAccess() === 'not_declared') {
    showMessage('Turn off Do Not Disturb to change the ring volume.');
  }
};

Bir seviyeyi okuyun, sonra bir medya kaydırıcısı ayarlayın:

if (window.WebToApk && WebToApk.setVolume) {
  const now = JSON.parse(WebToApk.getVolume('media'));   // {stream, current, max, percent, muted}
  slider.value = now.percent;
  slider.oninput = () => {
    const r = JSON.parse(WebToApk.setVolume('media', Number(slider.value), false));
    if (r.ok) label.textContent = r.percent + '%';
    else if (r.error === 'fixed_volume') slider.disabled = true;   // this phone has no adjustable volume
  };
}

Geçerli zil düzeyini gösterin ve değiştiğinde tepki verin:

if (window.WebToApk && WebToApk.getVolume) {
  const ring = JSON.parse(WebToApk.getVolume('ring'));   // {stream, current, max, percent, muted}
  document.getElementById('ring-slider').value = ring.percent;
  WebToApk.watchVolume(true);
  window.addEventListener('appmint:volume', (e) => {
    if (e.detail.stream === 'ring') document.getElementById('ring-slider').value = e.detail.percent;
  });
}

Notlar: değer telefonun en yakın adımına yuvarlanır ve yanıt gerçekte ayarlanan seviyeyi taşır. Arama akışı asla minimumunun (genellikle 1) altına inmez.

vibrate köprü#

window.WebToApk.vibrate(durationMs: Long)

Sayfa için basit dokunsal geri bildirim (navigator.vibrate ve bir desen biçimi). Derleme Titreşim iznini etkinleştirmediyse ikisi de yok sayılır.

Tek başına değil, grubu olan Titreşim altında açıklanır.

Örnek

Telefonu verilen milisaniye kadar bir kez titreştirir. Çoğu sayfa bunu sizin yerinize çağıran standart navigator.vibrate(ms) yöntemini kullanır.

Döndürür: hiçbir şey. Gerekenler: derleme sırasında 4. Adım'da (Erişim) Titreşim seçeneğini açın. Açık değilse çağrı hiçbir şey yapmaz.

Standart yol (bir tarayıcıda da aynı çalışır):

if ('vibrate' in navigator) navigator.vibrate(50);

Ham çağrı:

document.getElementById('like').addEventListener('click', function () {
  if (window.WebToApk && typeof window.WebToApk.vibrate === 'function') {
    window.WebToApk.vibrate(40);      // 40 ms
  }
});

// 0 (or any value <= 0) stops a running vibration
if (window.WebToApk && window.WebToApk.vibrate) window.WebToApk.vibrate(0);

Bir kaydırıcı yeni bir adıma oturduğunda, yerel bir seçici gibi küçük bir tık:

var slider = document.getElementById('size');
var last = slider.value;
slider.addEventListener('input', function () {
  if (slider.value === last) return;          // same step, no tick
  last = slider.value;
  if (window.WebToApk && typeof window.WebToApk.vibrate === 'function') {
    window.WebToApk.vibrate(10);              // 10 ms: a light tick
  }
});

Bir form gönderilemediğinde daha uzun bir titreşim, böylece kullanıcı hatayı hisseder:

document.getElementById('signup').addEventListener('submit', function (e) {
  if (this.checkValidity()) return;
  e.preventDefault();
  if (window.WebToApk && typeof window.WebToApk.vibrate === 'function') {
    window.WebToApk.vibrate(250);
  }
  this.reportValidity();
});

Notlar: Tam sayı verin. Şiddet telefonun varsayılanıdır; daha güçlü/zayıf dokunuşlar için Capacitor.Plugins.Haptics.impact veya Capacitor.Plugins.AppwrightHaptics.play kullanın. Titre-dur-titre deseni için vibratePattern.

vibratePattern köprü#

window.WebToApk.vibratePattern(patternJson: String)

Bir aç/kapat desenini titreştirir; örn. "[100,50,100]" = 100 ms titreşim, 50 duraklama, 100 titreşim. navigator.vibrate(array) arkasındadır; standart API'yi tercih edin. Oluşturucu Titreşim iznini etkinleştirmediyse işlem yapmaz.

Örnek

JSON dizesi olarak verilen bir açık/kapalı desenini titreştirir. Çoğu sayfa bunu sizin yerinize çağıran standart navigator.vibrate([...]) yöntemini kullanır.

Döndürür: hiçbir şey. Gerekenler: derleme sırasında 4. Adım'da (Erişim) Titreşim seçeneğini açın. Açık değilse çağrı hiçbir şey yapmaz.

Standart yöntem:

if ('vibrate' in navigator) navigator.vibrate([100, 50, 100]);   // buzz, pause, buzz

Ham çağrı aynı web tarzı deseni bir JSON dizesi olarak alır:

function pattern(list) {
  if (window.WebToApk && typeof window.WebToApk.vibratePattern === 'function') {
    window.WebToApk.vibratePattern(JSON.stringify(list));
  }
}

pattern([200]);                     // one 200 ms buzz
pattern([100, 50, 100, 50, 300]);   // short, short, long
pattern([]);                        // empty list stops a running vibration

Desen bir kez çalar; bu yüzden bir alarm, kullanıcı durdurana kadar onu kendisi tekrarlar:

var alarm = null;
var ALARM = JSON.stringify([500, 300, 500, 300, 500]);   // about 2.1 s

function startAlarm() {
  if (!window.WebToApk || typeof window.WebToApk.vibratePattern !== 'function') return;
  window.WebToApk.vibratePattern(ALARM);
  alarm = setInterval(function () { window.WebToApk.vibratePattern(ALARM); }, 3000);
}

function stopAlarm() {
  if (alarm === null) return;
  clearInterval(alarm);
  alarm = null;
  window.WebToApk.vibratePattern('[]');                 // stop the buzz that is still running
}

Notlar: İlk sayı bir titreşimdir, sonra duraklama, titreşim, duraklama ... (web sırası). Uygulama, Android'in baştaki "bekle" değerini sizin yerinize ekler; bu yüzden en başa kendiniz 0 koymayın: [0, 100] "0 ms titre, 100 ms dur" demektir ve hiçbir şey hissetmezsiniz. Negatif sayılar 0 sayılır. Desen bir kez çalar.

watchVolume köprü#

window.WebToApk.watchVolume(on: Boolean): Boolean

`appmint:volume` olaylarını açar (true) veya kapatır (false).

Örnek

Canlı ses değişikliği olaylarını açar veya kapatır: açıkken, bir ses seviyesindeki her değişiklik (donanım tuşları, sistem kaydırıcısı, başka bir uygulama) sayfaya şu şekilde ulaşır appmint:volume.

Döndürür: değişiklik etkili olduğunda true. Gerekir: hiçbir şey.

if (window.WebToApk && window.WebToApk.watchVolume) {
  window.addEventListener('appmint:volume', function (e) {
    // e.detail = { stream: 'media', current: 9, max: 15, percent: 60, muted: false }
    document.getElementById('vol-' + e.detail.stream).value = e.detail.percent;
  });
  WebToApk.watchVolume(true);
  window.addEventListener('pagehide', function () { WebToApk.watchVolume(false); });
}

Tercih ederseniz aynı nesneye bir sayfa kancası üzerinden de ulaşılabilir:

window.onAppMintVolume = function (level) {
  if (level.stream === 'alarm' && level.percent === 0) showMessage('Alarm volume is now off.');
};
WebToApk.watchVolume(true);

Seviyeyi getVolume ile bir kez gösterin, sonra yalnızca ekran görünürken canlı tutun:

if (window.WebToApk && WebToApk.watchVolume && WebToApk.getVolume) {
  const meter = document.getElementById('media-meter');
  meter.value = JSON.parse(WebToApk.getVolume('media')).percent;
  const onVol = function (e) { if (e.detail.stream === 'media') meter.value = e.detail.percent; };
  document.addEventListener('visibilitychange', function () {
    if (document.hidden) { WebToApk.watchVolume(false); window.removeEventListener('appmint:volume', onVol); }
    else { window.addEventListener('appmint:volume', onVol); WebToApk.watchVolume(true); }
  });
}

Notlar: değişen her akış için bir olay (media, alarm, ring, notification, call). Ses düzeylerini gösteren ekran kapandığında bunu kapatın.

Her belge derlemesinde uygulama çalışma zamanından ve örnek dosyalarından oluşturulur. Markdown olarak okuyun · Tüm aileler.

22.10.2026 tarihinde yayınlanan köprüyle karşılaştırılarak kontrol edildi.