Flutter ile bir uygulama geliştiriyorum, yeniyim. Mobilde ses açma/kapama tuşunu override etmek için dinlemeye çalışıyorum.
Paketlerin hepsinde destek kesilmiş ve eskiler ondan kullanmadım. Zaten çoğu butonu değil ses seviyesini dinliyor. Ses seviyesi değil direkt buton tıklamalari dinlemek istiyorum.
USB ile fiziksel cihazda çalışıyorum. Simülatör değil, kaldırmıyor bilgisayar.
Aşağıda açıkladığım yöntemleri denedim. şöyle bir sorun var, eğer bilgisayardan bir tuşa basılmazsa veya telefonda sanal klavye açılmazsa asla dinleme çalışmıyor. Bunları yapınca çalışmaya başlıyor. Ama uygulamayı arkaplana atıp geri getirince de artık çalışmıyor. Bunun odak ile ilgili olduğunu zannediyorum. Ama focus, focusscope widgetleri, focusnode, focusspocenode değişkenlerini her şekilde kullandım yok olmuyor. İlla klavye aktif edilmeden çalışmıyor.
Klavyeyi açmadan aktif etmeyi de beceremedim. En azından böyle bir hile deneyim demiştim.
Fiziksel cihaz tuşunu klavye olmadan dinleyemiyor muyuz?
Cihazım Xiaomi ve aslında vscode debug konsolunda (hiç bir şey yapmaya gerek kalmadan) keyeventlerin log'u (miuiinput ismiyle) görünüyor. Bu kodları yazmasam da telefondan ses tuşlarına basınca log geliyor. Yani bunları yakalayıp dinleyebilmem gerekmez mi?
Yerel kod için Java,kotlin, swift bilmiyorum. Kopyala yapıştır yapsam bile ileride bakımını ve değişiklikleri takip etme zorluğu çıkacak.
Flutter service kütüphanesinde yani çekirdekte bunu dinleme imkanı vermiş ama sorun yaşıyorum. Hatta bu sorun githubda 3 yıldır defalarca bildirilmiş ama ne çözüm var ne ilerleme..
Hardwarekeyboard.instance.addhandle denedim, rawkeyboard addlistener denedim, widgetları da denedim. Keyboardlistener, rawkeyboardlistener, shorcuts, focus vs...
Kaç gündür araştırıyorum bakmadığını arama sonucu kalmadı Googleda, chatgpt de yardımcı olmadı, discord kanalları da, dokümantasyonlarda da bunun için gerekli her şeyi denedim yok çözemedim. Bir şeyi mi kaçıyorum yoksa zaten böyle mi. Öyleyse de bir çözüm önerisi, hile, geçici çözüm filan var mı? Lütfen yardımcı olun kafayı yemek üzereyim artık.
Flutter ile kafayı yemek üzereyim!
5
●360
- 16-03-2023, 01:16:25Bunu yapmak pek mümkün değil gibi ayrıca kullanıcının ses seviyesini kısıtlamak kullanıcı deneyimi açısından da kötü bir hareket olacaktır.
- 16-03-2023, 01:27:11React native de bazı api ler, build almadan çalışmıyor. Muhtemelen benzer bir durumdan müzdaripsiniz. Native tarafla haberleşemiyor flutter bence. Build alıp kontrol ettiniz mi? Birde permission larda var mı bu bilmiyorum ama buraya da takılıyor olabilir. Flutter bilmiyorum sadece fikir vermek amaçlı aklıma gelenleri söylemek istedim.
- 16-03-2023, 03:01:46Mümkün hocam niye mümkün olmasın. Çalışıyor zaten ama odak problemi var. Klavye açılana kadar çalışmıyor. Zaten isteğe bağlı olacak, uygulama ayarlarından açılıp/kapatilabilmesi şeklinde.alicemalturan1 adlı üyeden alıntı: mesajı görüntüle
Valla hocam düşündüm de hiç build alıp denemedim. Hiç çalışmamazlık değil, sadece klavyeye focus'lanmadan çalışmıyor. Debug mod olarak kurulu zaten telefonda ama release ye de bakayım inşallah.VBuMaSTeR adlı üyeden alıntı: mesajı görüntüle
2018 den beri kapatılmamış onlarca hata raporu buldum github'da.
Denemediğim yöntem kalmadı. Denemediğim paket de kalmadı. Hatta Java/kotlin bilmesem de uğraşıp platforma özel kod da ekledim. Yok hiç bir şekilde klavye odağı gelmeden çalışmıyor. Bunun flutter çekirdek sorunu olduğunu düşünüyorum ama 5 yıldır da çözmemezlik yapılmaz herhalde.
Klavye odağından bağımsız olarak her tıklamada MIUIinput tıklandığına dair log gönderiyor. Onu yakalamaya çalıştım ama onu da beceremedim.
Java/kotlin videolarına da baktım orada 3-4 satırla çalışıyor. Yani android kısıtlaması yok. Flutterda sorun var bence. Tabi bu özelliğe ihtiyacım var, bunaldım. Cevaplar için teşekkürler. - 16-03-2023, 10:22:52aslında pub devin yaptıgı eklenti bu iş için perfect_volume_control: ^1.0.5 kontrollu bir sekilde kullanirsan. Flutter Uygulamasında Donanım Ses Düğmesine basıldığını dinleyebilir ve hangi düğmeye basıldığını, Ses Açma veya Ses kısma olarak belirleyebilirsiniz.
örnek olarak kendi yukarda veridigim linkte Xhambis tarafından örnek bir kodlama gerçekleştirilmiştir
Öncelikle pubspec.yaml dosyasına aşağıdaki satırları ekleyerek perfect_volume_control Flutter paketini projenize ekleyin:
dependencies: flutter: sdk: flutter perfect_volume_control: ^1.0.5
perfect_volume_control paketi, mevcut ses seviyesini almanızı, ses seviyesini ayarlamanızı ve ses değişimini dinlemenizi kolaylaştıracaktır. Yukarı veya aşağı ses düğmesine basmayı algılamak için ses değiştirme dinleyicisini kullanacağız.
Flutter'da Ses Düğmesine Basıldığında Nasıl Dinlenir?
import 'package:perfect_volume_control/perfect_volume_control.dart'; PerfectVolumeControl.stream.listen((volume) { //volume button is pressed, // this listener will be triggeret 3 times at one button press });Bu dinleyici, sistem sesi, müzik sesi ve alarm sesi için üç kez tetiklenecektir. Ses veya ses kısma düğmesinden hangi düğmeye basıldığını belirlemek için birkaç ince ayar yaptık. Dikkatli olun, kodumuzda, ses seviyesi UI'sinden manuel olarak artırma, ses düğmesine basmak olarak alınacaktır.
Hangi Ses Yukarı/Aşağı Düğmesine Basıldığı Nasıl Anlaşılır?
Aşağıdaki Flutter Uygulaması örnek kodunun tamamına bakın, ses seviyesi değiştirildiğinde ses düğmesi algılamasını tespit ettik.
import 'package:flutter/material.dart'; import 'package:perfect_volume_control/perfect_volume_control.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget{ @override Widget build(BuildContext context) { return MaterialApp( home: Home() ); } } class Home extends StatefulWidget { @override State<Home> createState() => _HomeState(); } class _HomeState extends State<Home> { double currentvol = 0.5; String buttontype = "none"; @override void initState() { Future.delayed(Duration.zero,() async { currentvol = await PerfectVolumeControl.getVolume(); //get current volume setState(() { //refresh UI }); }); PerfectVolumeControl.stream.listen((volume) { /ses düğmesine basılır // bu dinleyici tek tuşa basıldığında 3 kez tetiklenecek if(volume != currentvol){ //düğme tipi kontrolünü yalnızca bir kez yürütün if(volume > currentvol){ //yeni ses daha büyükse, yukarı düğmesi buttontype = "up"; }else{ // aşağı düğme buttontype = "down"; } } setState(() { currentvol = volume; }); }); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("Ses Düğmesine Bas"), backgroundColor: Colors.redAccent, ), body: Container( padding: EdgeInsets.all(20), child: Column( children: [ Text("Mevcut Hacim : $currentvol"), Divider(), buttontype == "none"? Text("Henüz hiçbir düğmeye basılmadı ."): Text(buttontype == "up"? "Ses Açma Düğmesine Basıldığında ": "Ses Kısma Düğmesine Basıldığında ", style: TextStyle(fontSize: 20),) ], ) ) ); } }Sesi Aç düğmesine Basıldığında.

Ses Kısma düğmesine basıldığında.

Bu şekilde, Flutter Uygulamasında Donanım Ses Düğmesine basıldığını dinleyebilir ve hangi düğmeye basıldığını, Ses Açma veya Ses kısma olarak belirleyebilirsiniz. - 16-03-2023, 14:38:19Bu da denediğim paketlerden biriydi hocam ama dikkat edin bu ses seviyesini dinliyor/takip ediyor, ses tuşlarını değil. Arada büyük bir uçurum var.OmerAti adlı üyeden alıntı: mesajı görüntüle
Ses tuşlarını da buradan tespit edebiliriz tabi ama aynı şey değil. Bu paketle Ui dan ses değiştirilince de tetiklenir. Ses tuşuna basılı tutunca da tetiklenir. Sesi değiştiren herhangi bir eylem bunu tetikler. Basılı tutumalar ve down/up gibi buton tıklama türleri birbirinden ayrılamaz. Çünkü butonla alakası yok, sesi dinliyor.
Yani daha önce denediğim bir paket ve aradığım şeyle pek alakası yok hocam maalesef.

