Ücretsiz APK oluştur

Cihaz özellikleri

Sensörler, Dosyalar ve Arka Plan İşleri

BLE fitness sensörlerini eşleyin, FIT/GPX/TCX dosyaları alın, kapalıyken işler çalıştırın

Sihirbazda 'Diğer Uygulamalardan Paylaşım Al'ı açın ve uygulamanızın kabul ettiklerini işaretleyin - metin ve bağlantılar, veri dosyaları (FIT, GPX, TCX, CSV, JSON, XML…), fotoğraflar, videolar, ses, belgeler. Uygulamanız tam olarak bu türler için İKİ yerde görünür:

  1. Kullanıcı bir dosyaya dokunduğunda Android'in 'Birlikte aç' paneli.
  2. Diğer uygulamaların gösterdiği PAYLAŞ / DIŞA AKTAR paneli - antrenman dosyalarını (.fit, .gpx, .tcx) dışa aktaran spor cihazları dahil. Çoğu fitness uygulaması Paylaş ile dışa aktarır; bu yüzden yalnızca 'Birlikte aç' kaydeden uygulamalar orada hiç görünmez.

Dosyayı AppMint.getOpenedFile() ile isteyin - sayfanız ne kadar geç başlarsa başlasın sizi bekler. f.kind image, video, audio, document veya data olur. Metin biçimleri (gpx, tcx, csv, json, xml…) kullanıma hazır f.text olarak; küçük ikili dosyalar (.fit) f.base64 olarak gelir; her veri dosyası ve belge f.file içinde gerçek bir File olarak gelir. Fotoğraflar, videolar ve ses, <video src> / <img src> için akışa uygun bir adres olan f.url olarak gelir; baytlara ihtiyacınız olduğunda f.getFile() vardır. Boyut sınırı yoktur. Paylaşılan bir bağlantı veya başlık WebToApk.getSharedText() ile okunur.

// Ask on startup — the file waits, however late your page mounts
const f = await AppMint.getOpenedFile();   // null if opened normally
if (f) {
  if (f.name.endsWith('.gpx') || f.name.endsWith('.tcx')) {
    const xml = new DOMParser().parseFromString(f.text, 'text/xml');
    const points = xml.querySelectorAll('trkpt, Trackpoint');
    console.log('workout with ' + points.length + ' points');
  } else if (f.name.endsWith('.fit')) {
    // .fit is binary — a real File; parse its bytes
    parseFit(new Uint8Array(await f.file.arrayBuffer())); // e.g. fit-file-parser
  } else if (f.kind === 'video') {
    document.querySelector('video').src = f.url;   // streams from disk, seekable
  }
}

// A shared link or caption
const shared = JSON.parse(WebToApk.getSharedText() || 'null');
if (shared) console.log('shared:', shared.url || shared.text);

2Bluetooth fitness sensörlerini eşleyin (kalp atışı, hız, kadans…)#

Sihirbazda Bluetooth iznini açın ve uygulamanız standart BLE sensörlerini eşleyebilir - uyumlu her göğüs bandı ve bisiklet sensörü aynı resmi Bluetooth profillerini kullanır, bu yüzden marka başına kod gerekmez:

  • Kalp atışı bantları → bpm
  • Hız/kadans sensörleri → km/sa + pedal devri
  • Güç ölçerler → watt
  • Koşu ayak sensörleri → tempo + adım/dk
  • Her sensörün pil seviyesi

Akış: tara (15 sn) → kullanıcı bir cihaz seçer → bağlan. Veriler daha sonra olaylar olarak akar. Hız için tekerlek boyutunuz gerekir; bir kez ayarlayın (varsayılan 2096 mm = 700x23c yol tekerleği).

// 1. Scan — each found sensor fires a 'device' event:
window.addEventListener('appmint:ble', function (e) {
  const m = e.detail;
  if (m.kind === 'device') {
    // {address, name, sensors:['heart_rate','speed_cadence',...], rssi}
    addToPickerUI(m);
  }
  if (m.kind === 'data') {
    if (m.type === 'heart_rate')     showBpm(m.data.bpm);
    if (m.type === 'speed_cadence') {
      if (m.data.speedKmh)   showSpeed(m.data.speedKmh.toFixed(1));
      if (m.data.cadenceRpm) showCadence(Math.round(m.data.cadenceRpm));
    }
    if (m.type === 'power')   showWatts(m.data.watts);
    if (m.type === 'battery') showBattery(m.data.percent);
  }
  if (m.kind === 'error') console.warn('BLE:', m.error);
});

WebToApk.bleSetWheelCircumference(2105); // your wheel, in mm
WebToApk.bleStartScan();

// 2. When the user taps a device from your picker:
WebToApk.bleConnect(device.address);

// 3. Done training:
WebToApk.bleDisconnect();

3Arka plan işleri ve kalıcı otomatik kayıt (WorkManager)#

Uygulamanız kapalıyken JavaScript çalışamaz - bu Android'dir, AppMint değil. Çalışabilen şey, sayfanızın işletim sistemine devrettiği yerel bir teslimat işidir. İki araç:

  1. workEnqueueOnline - kalıcı tek seferlik teslimat. Mükemmel otomatik kayıt: veriyi teslim edin, ağ olduğunda sunucunuza POST eder, geri çekilmeyle yeniden dener, uygulamanın sonlandırılmasından ve yeniden başlatmalardan sağ çıkar. Aynı iş kimliğini yeniden kullanmak bekleyen kaydı en yeni durumla değiştirir.
  1. workSchedulePeriodic - yinelenen yerel bir HTTP çağrısı (senkron tetikleyici, heartbeat). Android'in asgari aralığı 15 dakikadır; daha kısa değerler yükseltilir.

İkisi de SİZİN verinizi SİZİN URL'nize iletir - sunucu tarafı, zaten sahip olduğunuz normal bir uç noktadır (Supabase edge function, API'niz…).

// Durable auto-save: call this on every important change.
function autoSave(state) {
  WebToApk.workEnqueueOnline(
    'autosave',                          // same id → newest state wins
    'https://api.example.com/save',
    'POST',
    JSON.stringify({ 'Authorization': 'Bearer ' + token }),
    JSON.stringify(state)
  );
}

// Recurring sync every 30 minutes, even if the app is closed:
WebToApk.workSchedulePeriodic(
  'sync', 'https://api.example.com/sync', 'POST', '{}', '', 30
);

// Manage jobs:
WebToApk.workCancel('sync');
WebToApk.workList('req1');
window.addEventListener('appmint:work', function (e) {
  // {id, status:'enqueued'|'scheduled'|'cancelled'|'failed', reason?, intervalMinutes?}
  // or, for workList: {requestId, jobs:[{id, periodic, url, createdAt, pendingDelivery}]}
  console.log('work:', e.detail);
});

4Kontrol listesi ve sık yapılan hatalar#

  • Dosyalar: anahtar derleme sırasında AÇIK olmalıdır - uygulamanızı, kurulumdan sonra değiştirilemeyen Android manifest'ine kaydeder. Etkinleştirdikten sonra yeniden derleyin.
  • BLE: Bluetooth izni anahtarı derleme sırasında AÇIK olmalıdır. İLK tarama, kullanıcıdan çalışma zamanı iznini ister (Android 12+: 'Yakındaki cihazlar'; daha eski: Konum - bu, BLE taraması için bir Android kuralıdır, uygulamanız konumu okumaz).
  • BLE: Android'in Bluetooth ayarlarında değil, KENDİ uygulamanızda eşleyin - BLE fitness sensörleri klasik eşleşmiş cihazlar değildir.
  • Arka plan işleri: 'sayfa kodumu çalıştır' diye periyodik iş zamanlamayın - sunucunuza HTTP teslim eder. Kapalıyken cihaz üzerinde işlem gerekiyorsa teslimat uç noktası bunun içindir.
  • Otomatik kayıt: her zaman AYNI iş kimliği. Farklı kimlikler birden fazla eski kaydı kuyruğa alır.

Bu sayfa, uygulamanın içindeki Entegrasyon Rehberi'nden oluşturulur, bu yüzden mevcut derlemenin söylediğini aynen söyler. Markdown olarak okuyun.

22.10.2026 tarihinde yayınlanan rehberle karşılaştırılarak kontrol edildi.