1

Ich versuche, eine App, die eine On-Click-Listener in der App auslöst, wenn eine Taste auf dem gepaarten Bluetooth-Gerät gedrückt wird. Nach dem googeln für mehrere Stunden denke ich, ich bin nicht in der Lage, Keycode des Knopfes des Bluetooth-Gerät zu senden Empfänger, wo, wenn der Schlüsselcode dann kann ich den On-Click-Listener anrufen oder vielleicht mein Ansatz und Verständnis ist falsch, so könnte jemand bitte mich führen oder mich auf den richtigen Ansatz hinweisen? Vielen Dank im VorausBluetooth-Geräte-Taste Drücken sollte Onclick Listener in der App auslösen

Bluetooth-Gerät: Bluetooth Selfie Fern AB Verschluss 3

Ich möchte so etwas wie dieses http://www.barbatricks.com/en/android-en/remap-ab-shutter-3-selfie-remote/

ich die folgenden Links als Referenz versucht, aber ohne Erfolg

How to capture key events from bluetooth headset with android

BroadcastReceiver for ACTION_MEDIA_BUTTON not working

How to detect bluetooth call/media button press in android app

http://blog.phonedeveloper.com/2015/04/how-to-receive-bluetooth-broadcast.html

Antwort

0

Nun, Android - Volume Buttons used in my application & Markus Kauppinens Erklärung löste mein Problem. Der unten stehende Code in der MainActivity kann Ihnen helfen, eine Funktion in Ihrer App auszulösen, wenn auf eine Schaltfläche auf einer AB Shutter 3 selfie Fernbedienung geklickt wird. Tasten der Fernbedienung sind in meiner App als Android-Taste ENTER Keycode 66 & iOS Taste VOLUME_UP Keycode 24

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    takeKeyEvents(true); 
    } 

@Override 
    public boolean dispatchKeyEvent(KeyEvent event) { 
     int action = event.getAction(); 
     int keyCode = event.getKeyCode(); 
     switch (keyCode) { 

      case KeyEvent.KEYCODE_VOLUME_UP: 
       if (action == KeyEvent.ACTION_DOWN) { 
        Log.i("VOL_UP_pressed", String.valueOf(event.getKeyCode())); 
        Toast.makeText(getApplication(), "IOS button clicked", Toast.LENGTH_SHORT).show(); 
       }         
       return true; 

      case KeyEvent.KEYCODE_ENTER: 
       if(action==KeyEvent.ACTION_DOWN){ 
        Log.i("ENTER_pressed", String.valueOf(event.getKeyCode())); 
        Toast.makeText(getApplication(), "ANDROID button clicked", Toast.LENGTH_SHORT).show(); 
       } 
      default: 
       return super.dispatchKeyEvent(event); 
     } 
    } 

ABER BITTE BEACHTEN erkannt: Es wird KeyEvents erkennen nur innerhalb Ihrer App nicht, während die App nicht läuft. Mein nächster Schritt ist, zu finden, wie man die APP und ein clicklistener innerhalb dieser APP, wenn eine Taste auf dem gepaarten AB Shutter 3 selfie Fernsteuerungs mit jeder versucht wird, mit Vorschlägen, Anleitung oder irgendeiner Art der Hilfe? Vielen Dank im Voraus

+0

hallo, hast du eine lösung für diese aufgabe gefunden? –

+0

@KadzhaevMarat Leider konnte ich keine Lösung finden – Sid

1

Ich habe viele Anwendungen mit BT erstellt .. Hier ist mein einfacher Vorschlag für Sie:

1- mit BluetoothChat Probe zu starten: link

2- Definieren Sie Ihre eigenen ID in IDs.XML dh:

<resources> 
    <id name="keyboard" /> 
</resources> 

3- Halten Sie alle gängigen Schaltflächen Instanz in Karte basiert auf dieser ID

4- Erstellen Brücke als Kommunikationskanal zwischen den Geräten, so dass Sie Daten in Birichtung

5- verwenden, die Brücke Ereignisse von/zu Vorrichtungen auszustrahlen

6- Wenn empfangen senden Ereignisdaten, erhalten Sie einfach diese Schaltfläche nach ID und rufen Sie:

mView.performClick(); 

Das ist es.

+0

Vielen Dank für Ihre Zeit wirklich zu schätzen .. @ Maher Abuthraa – Sid

2

Die Selfie-Fernbedienung zeigt sich in Android als Bluetooth-Tastatur, oder? Oder als HID (Human Interface Device) im Allgemeinen.

Wenn das der Fall ist, dann fügen Sie die onCreate();

takeKeyEvents(true); 

Dies erklärt in the documentation:

anfordern, die wichtigsten Ereignisse dieser Tätigkeit kommen. Verwenden Sie dies, wenn Ihre Aktivität keine Ansichten mit Fokus hat, die Aktivität jedoch weiterhin eine Chance zur Verarbeitung wichtiger Ereignisse haben soll.

Aufschalten der onKeyUp() (in Ihrer Aktivität) und einige Aktionen auf die Tasten zuweisen, die Sie verwenden möchten:

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 

    switch (keyCode) { 

     case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: 
      Log.d(this.getClass().getName(), "KEYCODE_MEDIA_PLAY_PAUSE"); 
      // Do something... 

      return true; 
     case KeyEvent.KEYCODE_MEDIA_PREVIOUS: 
      Log.d(this.getClass().getName(), "KEYCODE_MEDIA_PREVIOUS"); 
      // Do something... 

      return true; 
     case KeyEvent.KEYCODE_MEDIA_NEXT: 
      Log.d(this.getClass().getName(), "KEYCODE_MEDIA_NEXT"); 
      // Do something... 

      return true; 
     case KeyEvent.KEYCODE_VOLUME_DOWN: 
      Log.d(this.getClass().getName(), "KEYCODE_VOLUME_DOWN"); 
      // Do something... 

      return true; 
     case KeyEvent.KEYCODE_VOLUME_UP: 
      Log.d(this.getClass().getName(), "KEYCODE_VOLUME_UP"); 
      // Do something... 

      return true; 
     case KeyEvent.KEYCODE_ENTER: 
      Log.d(this.getClass().getName(), "KEYCODE_ENTER"); 
      // Do something... 

      return true; 
     default: 
      return super.onKeyUp(keyCode, event); 
    } 
} 

Die onKeyUp() Methode is explained:

aufgerufen, wenn ein Schlüssel war freigegeben und nicht von einer der Ansichten innerhalb der Aktivität behandelt. So drücken zum Beispiel Tasten, während der Cursor in einem TextView ist, wird das Ereignis nicht auslösen (es sei denn, es ist eine Navigation zu einem anderen Objekt), weil TextView seinen eigenen Schlüssel drückt.

Die Standardimplementierung behandelt KEYCODE_BACK, um die Aktivität zu stoppen und zurückzugehen.

Lassen Sie das System einfach alle Schlüssel behandeln, die Sie nicht erfassen möchten. Das macht der default Block.

Überprüfen Sie einfach, welcher Schlüsselcode von der Fernbedienung kommt und entfernen Sie die unnötigen Fälle. Dies sind nur einige Kandidaten für Schlüsselcodes, die eine Fernbedienung senden könnte.

Und natürlich gilt alles, was für die Handhabung von Tastaturen allgemein gilt auch für die Fernbedienung. (Angenommen, es ist ein HID. Aber sie sind in der Regel. Bluetooth-Headsets mit Tasten sind dann eine völlig andere Geschichte.)

Dies ermöglicht Ihnen, die Fernbedienung in Ihrer eigenen App zu verwenden. Ich sehe nicht, warum BroadcastReceivers oder onClickListeners beteiligt sein sollten, aber vielleicht habe ich den Punkt verpasst.

Wenn Sie möchten, dass etwas im Hintergrund läuft und Schlüsselereignisse an andere Anwendungen sendet/die Tasten der Fernbedienung auf andere Tastencodes umsetzt, um Systemdienste auszulösen, dann ist das auch eine andere Geschichte.

+0

Vielen Dank für Ihre Zeit – Sid

+0

In der Tat haben Sie mich verstehen das Konzept sehr gut, die mir geholfen, die Codierung Teil. – Sid