JavaScript ब्रिज API
वाइब्रेशन और आवाज़
हैप्टिक फ़ीडबैक, ऐप की अपनी क्लिक की आवाज़ जो हर बेवजह टैप के बजाय आपके अपने ज़रूरी इवेंट पर बजती है, और वह बैकग्राउंड म्यूज़िक ट्रैक जो क्रिएटर ने बिल्ड के समय चुना - ऐप में कोई ट्रैक न हो तो getMusicVolume -1 लौटाता है, इसलिए सेटिंग्स स्क्रीन बेकार स्लाइडर दिखाने के बजाय उसे छिपा सकती है।
cancelVibrate ब्रिज#
window.WebToApk.cancelVibrate()
पेज के लिए आसान हैप्टिक्स (navigator.vibrate और एक पैटर्न रूप)। बिल्ड में Vibrate अनुमति चालू न हो तो दोनों अनदेखे किए जाते हैं।
इसका वर्णन अलग से नहीं, बल्कि इसके समूह वाइब्रेशन में है।
उदाहरण
अब भी चल रहे वाइब्रेशन को रोकता है। ज़्यादातर पेज स्टैंडर्ड navigator.vibrate(0) इस्तेमाल करते हैं, जो इसे आपके लिए कॉल कर देता है।
लौटाता है: कुछ नहीं। ज़रूरत: बिल्ड करते समय चरण 4 (Access) में Vibrate चालू करें।
स्टैंडर्ड तरीका:
if ('vibrate' in navigator) navigator.vibrate(0); // or navigator.vibrate([])कच्चा कॉल, जैसे उपयोगकर्ता के "Dismiss" दबाने पर लंबे अलार्म पैटर्न को रोकने के लिए:
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();
}
});उपयोगकर्ता के स्क्रीन छोड़ने पर चल रहा वाइब्रेशन रोकें, ताकि फ़ोन उनकी जेब में बज़ करता न रहे:
document.addEventListener('visibilitychange', function () {
if (!document.hidden) return;
if (window.WebToApk && typeof window.WebToApk.cancelVibrate === 'function') {
window.WebToApk.cancelVibrate();
}
});नोट: जब कुछ वाइब्रेट न हो रहा हो तब भी कॉल करना सुरक्षित है।
getMusicVolume ब्रिज#
window.WebToApk.getMusicVolume(): Int
मौजूदा लेवल 0..100, या -1 जब इस ऐप में बैकग्राउंड म्यूज़िक नहीं है।
उदाहरण
ऐप के लूप होने वाले बैकग्राउंड म्यूज़िक का लेवल पढ़ता है, 0 से 100।
लौटाता है: एक संख्या, सिंक्रोनस रूप से: 0-100, या -1 जब यह ऐप बिना म्यूज़िक फ़ाइल के बना हो। ज़रूरत: बिल्ड करते समय चरण 3 (Integrate) में, Display Options के अंतर्गत, Background Music के तहत चुनी गई एक फ़ाइल।
म्यूज़िक स्लाइडर तभी दिखाएँ जब म्यूज़िक हो:
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));
});
}म्यूट बटन जो अनम्यूट करने पर उपयोगकर्ता के अपने लेवल पर लौटता है (ऐप 0 भी याद रखता है, इसलिए पुराना लेवल खुद रखें):
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();म्यूज़िक को उसके मौजूदा लेवल से नए लेवल तक धीरे-धीरे बदलें, जैसे किसी संवाद वाले दृश्य के दौरान:
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नोट: यह वह लेवल लौटाता है जो बिल्ड स्लाइडर से या आपके पिछले setMusicVolume कॉल से सेट हुआ। जब कोई दूसरा ऐप या कॉल ऑडियो ले लेता है, तो म्यूज़िक अपने आप धीमा या रुक जाता है; आपके पढ़े हुए नंबर में बदलाव नहीं होता।
getVolume ब्रिज#
window.WebToApk.getVolume(stream: String): String
एक स्ट्रीम का लेवल: `{stream, current, max, percent, muted}` JSON स्ट्रिंग के रूप में। stream: 'media' | 'alarm' | 'ring' | 'notification' | 'call'।
उदाहरण
फ़ोन के अपने वॉल्यूम लेवल में से एक पढ़ता है।
लौटाता है: एक JSON स्ट्रिंग, सिंक्रोनस रूप से: {"stream":"alarm","current":5,"max":7,"percent":71,"muted":false} - current/max फ़ोन के अपने चरण हैं (फ़ोन के हिसाब से अलग होते हैं), percent 0-100 है। stream 'media', 'alarm', 'ring', 'notification' या 'call' होता है; कोई और नाम देने पर {"error":"unknown_stream"} मिलता है। ज़रूरत: कुछ नहीं।
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();सेटिंग्स स्क्रीन में सभी लेवल दिखाएँ:
['media', 'alarm', 'ring', 'notification'].forEach(function (s) {
const v = JSON.parse(WebToApk.getVolume(s));
document.getElementById('vol-' + s).value = v.percent;
});वॉल्यूम सेट करें और नतीजा पढ़ें। setVolume(stream, percent, showUi) JSON स्ट्रिंग में जवाब देता है।
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 ब्रिज#
window.WebToApk.playClick()
ऐप की टैप की आवाज़ माँगने पर बजाता है, ताकि पेज उसे अपने ही ज़रूरी इवेंट (बटन दबाना) पर चला सके, हर बेवजह टैप पर नहीं - जो नेटिव ऐप असल में करता है, और इसी वजह से clickSoundMode "off" हो सकता है और यह फिर भी काम करता है। सिर्फ़ तब कुछ नहीं होता जब ऐप टैप साउंड के बिना बना हो (enableClickSound बंद)। clickSoundMode "off" में - यानी हर टैप पर अपने आप आवाज़ नहीं - स्पष्ट कॉल फिर भी बजता है: यह मोड उन ऐप के लिए है जो अपने इवेंट पर आवाज़ करते हैं। अन्यथा यह क्रिएटर का तय किया हुआ फ़ीडबैक बजाता है।
उदाहरण
ऐप की टैप की आवाज़ एक बार बजाता है, ताकि आपके अपने बटन नेटिव ऐप की तरह क्लिक कर सकें।
लौटाता है: कुछ नहीं। ज़रूरत: बिल्ड करते समय चरण 3 (Integrate) में, Display Options के अंतर्गत, Tap Sound स्विच (डिफ़ॉल्ट रूप से चालू)। स्विच बंद हो तो यह कुछ नहीं करता।
function clickSound() {
if (window.WebToApk && typeof window.WebToApk.playClick === 'function') {
window.WebToApk.playClick();
}
}
document.querySelectorAll('button, .tab').forEach(function (el) {
el.addEventListener('click', clickSound);
});पूरे गेम बोर्ड के लिए एक लिसनर, जो सिर्फ़ तभी क्लिक करे जब टैप से कुछ होता हो:
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);
});बिल्ड सेटिंग के ऊपर अपने उपयोगकर्ताओं को उनका अपना "Sounds" स्विच दें:
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();
}
}नोट: आपको क्या सुनाई देगा, यह Tap sound के चुनाव पर निर्भर करता है:
- फ़ोन की सेटिंग का पालन करें (सुझाया गया): सिस्टम की क्लिक। अगर उपयोगकर्ता ने फ़ोन की सेटिंग्स में "Touch sounds" बंद किया है तो यह चुप रहती है। यह जानबूझकर है।
- हर टैप पर हमेशा बजाएँ: ऐप की अपनी क्लिक, हमेशा सुनाई देने वाली। पेज पर हर टैप भी क्लिक करता है, इसलिए इस मोड में आपको आमतौर पर
playClick()की ज़रूरत नहीं होती।
इसे असली बटन दबाने से कॉल करें, टाइमर से नहीं।
requestDndAccess ब्रिज#
window.WebToApk.requestDndAccess(): String
Do Not Disturb एक्सेस, जो DND चालू होने पर रिंग / नोटिफ़िकेशन लेवल बदलने के लिए चाहिए। "granted" | "opened" (सेटिंग्स स्क्रीन खोली गई) | "not_declared"।
उदाहरण
Do Not Disturb एक्सेस माँगता है, जो Android तब ज़रूरी करता है जब कोई ऐप Do Not Disturb चालू होने पर रिंग या नोटिफ़िकेशन वॉल्यूम बदलना चाहे (तब setVolume जवाब देता है dnd_access_required)।
लौटाता है: एक स्ट्रिंग: 'granted' (पहले से अनुमति है), 'opened' (सिस्टम की वह स्क्रीन खोली गई जहाँ उपयोगकर्ता अनुमति देता है - लौटने पर दोबारा जाँचें), या 'not_declared' (इस बिल्ड में अनुमति शामिल नहीं है, इसलिए Android ऐप को वहाँ सूचीबद्ध नहीं करेगा)। ज़रूरत: अपने ऐप के कोड में requestDndAccess कॉल करना: तब बिल्ड अपने आप ACCESS_NOTIFICATION_POLICY घोषित कर देता है।
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.');
}उपयोगकर्ता के एक्सेस देने के बाद वॉल्यूम बदलाव एक बार फिर आज़माएँ:
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;
}"मीटिंग मोड" स्विच से रिंग को चुप करें, और जब यह काम न कर सके तो वजह बताएँ:
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 ब्रिज#
window.WebToApk.setMusicVolume(percent: Int)
पेज से बैकग्राउंड-म्यूज़िक लेवल सेट करें, 0..100। विज़ार्ड स्लाइडर तय करता है कि ऐप कैसे शुरू होता है; यह वह तरीका है जिससे ऐप अपने उपयोगकर्ताओं को म्यूज़िक कंट्रोल देता है, जो सेटिंग्स स्क्रीन वाले हर गेम में अपेक्षित होता है। [BackgroundMusic.setVolume] में सीमित किया जाता है, इसलिए 500 या -1 देने वाला पेज MediaPlayer को उसकी स्वीकार्य सीमा से बाहर का गेन नहीं दे सकता। लेवल याद रखा जाता है: अगली बार ऐप विज़ार्ड के लेवल पर नहीं, इसी पर शुरू होता है। अगर ऐप बिना ट्रैक के बना है तो कुछ नहीं होता - सेट करने को कुछ है ही नहीं, और ईमानदार जवाब [getMusicVolume] का -1 लौटाना है ताकि पेज ऐसा स्लाइडर दिखाने के बजाय उसे छिपा सके जो कुछ नहीं करता।
उदाहरण
ऐप के लूप होने वाले बैकग्राउंड म्यूज़िक का लेवल बदलता है, 0 से 100, जैसे आपके गेम की सेटिंग्स स्क्रीन से।
लौटाता है: कुछ नहीं। ज़रूरत: बिल्ड करते समय चरण 3 (Integrate) में, Display Options के अंतर्गत, Background Music के तहत चुनी गई एक फ़ाइल। म्यूज़िक के बिना यह कुछ नहीं करता (जाँचने के लिए getMusicVolume() देखें -1).
म्यूट बटन - ऐप अगली बार शुरू होने के लिए लेवल याद रखता है:
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);
});सेटिंग्स स्क्रीन में Off / Low / High बटन:
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);
});
});अपना वीडियो चलने के दौरान म्यूज़िक धीमा करें, फिर उसे वापस कर दें (लेवल याद रखा जाता है, इसलिए हमेशा उसे बहाल करें):
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);नोट: आपका सेट किया हुआ लेवल सेव हो जाता है: अगली बार ऐप बिल्ड स्लाइडर के लेवल के बजाय इसी से शुरू होता है (जब तक उपयोगकर्ता ऐप का डेटा साफ़ न करे)। 0 म्यूज़िक को चुप कर देता है लेकिन वह चलता रहता है।
setVolume ब्रिज#
window.WebToApk.setVolume(stream: String, percent: Double, showUi: Boolean): String
किसी स्ट्रीम को [percent] (0-100) पर सेट करता है; [showUi] फ़ोन का वॉल्यूम स्लाइडर दिखाता है। `{ok:true, stream, current, max, percent}` या `{ok:false, error}` - error यह होता है: unknown_stream | bad_percent | fixed_volume | dnd_access_required | muted | not_applied | failed | foreign_origin (ऐप की अपनी साइट के बाहर का पेज)।
उदाहरण
फ़ोन के अपने वॉल्यूम लेवल में से एक सेट करता है, 0-100 - जैसे जगाने वाले अलार्म के लिए अलार्म स्ट्रीम बढ़ाना, या म्यूज़िक ऐप में मीडिया स्लाइडर।
लौटाता है: एक JSON स्ट्रिंग: {"ok":true,"stream":"alarm","current":6,"max":7,"percent":86}, या {"ok":false,"error":"…"} जहाँ error यह है: unknown_stream, bad_percent, fixed_volume (इस डिवाइस में एडजस्ट होने वाला वॉल्यूम नहीं है), dnd_access_required (Do Not Disturb चालू है और रिंग / नोटिफ़िकेशन लेवल को रोकता है - देखें requestDndAccess()), foreign_origin (आपके ऐप की अपनी साइट के बाहर का पेज) या failed। showUi: true फ़ोन का अपना वॉल्यूम स्लाइडर चलते समय दिखाता है। ज़रूरत: मीडिया, अलार्म और कॉल के लिए कुछ नहीं; DND चालू होने पर रिंग और नोटिफ़िकेशन के लिए Do Not Disturb एक्सेस चाहिए हो सकता है।
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.');
}
};लेवल पढ़ें, फिर मीडिया स्लाइडर सेट करें:
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
};
}मौजूदा रिंग लेवल दिखाएँ और बदलने पर प्रतिक्रिया दें:
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;
});
}नोट: मान को फ़ोन के सबसे नज़दीकी चरण पर गोल किया जाता है, और जवाब में असल में सेट हुआ लेवल होता है। कॉल स्ट्रीम अपने न्यूनतम (आमतौर पर 1) से नीचे नहीं जाती।
vibrate ब्रिज#
window.WebToApk.vibrate(durationMs: Long)
पेज के लिए आसान हैप्टिक्स (navigator.vibrate और एक पैटर्न रूप)। बिल्ड में Vibrate अनुमति चालू न हो तो दोनों अनदेखे किए जाते हैं।
इसका वर्णन अलग से नहीं, बल्कि इसके समूह वाइब्रेशन में है।
उदाहरण
फ़ोन को दिए गए मिलीसेकंड तक एक बार वाइब्रेट करता है। ज़्यादातर पेज स्टैंडर्ड navigator.vibrate(ms) इस्तेमाल करते हैं, जो इसे आपके लिए कॉल कर देता है।
लौटाता है: कुछ नहीं। ज़रूरत: बिल्ड करते समय चरण 4 (Access) में Vibrate चालू करें। इसके बिना कॉल कुछ नहीं करता।
स्टैंडर्ड तरीका (ब्राउज़र में भी वैसे ही काम करता है):
if ('vibrate' in navigator) navigator.vibrate(50);सीधा कॉल:
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);स्लाइडर के हर नए चरण पर बैठते समय एक हल्की टिक, नेटिव पिकर की तरह:
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
}
});फ़ॉर्म न भेजा जा सकने पर एक लंबा बज़, ताकि उपयोगकर्ता त्रुटि महसूस करे:
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();
});नोट: एक पूर्णांक दें। तीव्रता फ़ोन की डिफ़ॉल्ट होती है; ज़्यादा/कम तेज़ टैप के लिए Capacitor.Plugins.Haptics.impact या Capacitor.Plugins.AppwrightHaptics.play इस्तेमाल करें। बज़-रुकना-बज़ पैटर्न के लिए इस्तेमाल करें vibratePattern.
vibratePattern ब्रिज#
window.WebToApk.vibratePattern(patternJson: String)
ऑन/ऑफ़ पैटर्न से वाइब्रेट करता है, जैसे "[100,50,100]" = 100ms बज़, 50 रुकना, 100 बज़। navigator.vibrate(array) के पीछे है; स्टैंडर्ड API इस्तेमाल करना बेहतर है। क्रिएटर ने Vibrate अनुमति चालू न की हो तो कुछ नहीं होता।
उदाहरण
ऑन/ऑफ़ पैटर्न से वाइब्रेट करता है, जो JSON स्ट्रिंग के रूप में दिया जाता है। ज़्यादातर पेज स्टैंडर्ड navigator.vibrate([...]) इस्तेमाल करते हैं, जो इसे आपके लिए कॉल कर देता है।
लौटाता है: कुछ नहीं। ज़रूरत: बिल्ड करते समय चरण 4 (Access) में Vibrate चालू करें। इसके बिना कॉल कुछ नहीं करता।
स्टैंडर्ड तरीका:
if ('vibrate' in navigator) navigator.vibrate([100, 50, 100]); // buzz, pause, buzzकच्चा कॉल वही वेब-शैली का पैटर्न JSON स्ट्रिंग के रूप में लेता है:
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पैटर्न एक बार चलता है, इसलिए अलार्म इसे खुद दोहराता है जब तक उपयोगकर्ता उसे बंद न करे:
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
}नोट: पहली संख्या एक बज़ है, फिर रुकना, बज़, रुकना ... (वेब का क्रम)। ऐप आपके लिए Android का शुरुआती "इंतज़ार" जोड़ देता है, इसलिए खुद सबसे पहले 0 न डालें: [0, 100] का मतलब है "0 ms बज़, 100 ms रुकना" और आपको कुछ महसूस नहीं होगा। नकारात्मक संख्याएँ 0 गिनी जाती हैं। पैटर्न एक बार चलता है।
watchVolume ब्रिज#
window.WebToApk.watchVolume(on: Boolean): Boolean
`appmint:volume` इवेंट चालू (true) या बंद (false) करता है।
उदाहरण
लाइव वॉल्यूम-बदलाव इवेंट चालू या बंद करता है: चालू रहने पर वॉल्यूम लेवल का हर बदलाव (हार्डवेयर कुंजियाँ, सिस्टम स्लाइडर, कोई दूसरा ऐप) पेज तक इस रूप में पहुँचता है appmint:volume.
लौटाता है: बदलाव लागू होने पर true। ज़रूरत: कुछ नहीं।
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); });
}वही ऑब्जेक्ट एक पेज हुक तक भी पहुँचता है, अगर आप वह पसंद करें:
window.onAppMintVolume = function (level) {
if (level.stream === 'alarm' && level.percent === 0) showMessage('Alarm volume is now off.');
};
WebToApk.watchVolume(true);getVolume से लेवल एक बार दिखाएँ, फिर उसे तभी लाइव रखें जब स्क्रीन दिख रही हो:
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); }
});
}नोट: जिस स्ट्रीम में बदलाव हुआ उसके लिए एक इवेंट (media, alarm, ring, notification, call)। जब लेवल दिखाने वाली स्क्रीन बंद हो जाए तो इसे बंद कर दें।