Statistiques
| Branche: | Révision:

teotestbluetooth / TestXamConnections / TestXamConnections.Android / Connection / InternConnectionService.cs @ master

Historique | Voir | Annoter | Télécharger (3,097 ko)

1 58c56df1 Martin Toutant
using Android.App;
2
using Android.Content;
3
using System;
4
using System.Collections.Generic;
5
using System.Text;
6 0875d625 Martin Toutant
using System.Threading.Tasks;
7 91ef3e8c Martin Toutant
using TestXamConnections.Connection;
8 1fd64302 Martin Toutant
using TestXamConnections.Droid.Receivers;
9 c32a628f Martin Toutant
using TestXamConnections.Device.RFID.Agrident;
10 58c56df1 Martin Toutant
11 91ef3e8c Martin Toutant
namespace TestXamConnections.Droid.Connection
12 58c56df1 Martin Toutant
{
13
    /* Classe permettant d'établir une avec une applications tiers
14
     * Pré-installée sur l'appareil
15
     * Basée sur filtrage d'intent sur BroadcastReceiver
16
     */
17 340558f2 martin.toutant
    public class InternConnexionService : IConnexionService
18 58c56df1 Martin Toutant
    {
19 340558f2 martin.toutant
        public EventHandler<byte[]> DonneesRecuesEvent { get; set; }
20 0875d625 Martin Toutant
21 1fd64302 Martin Toutant
        private readonly IntentReceiver intentReceiver;
22
        private readonly Context appContext;
23
24
        /* La fonction connect dans le cas du connexion en interne
25
        *  Est en fait, la configuration de l'IntentReceiver
26
        */
27 340558f2 martin.toutant
        public Task<bool> Connexion(Dictionary<string, string> param)
28 0875d625 Martin Toutant
        {
29 340558f2 martin.toutant
            if (param.ContainsKey(ConnexionConstantes.RECEIVABLE_INTENTS_KEY))
30 1fd64302 Martin Toutant
            {
31 8787b8fb Martin Toutant
                // Récupérations des intents recevable sous forme de csv
32 1fd64302 Martin Toutant
                List<string> intents = new List<string>();
33 340558f2 martin.toutant
                intents.AddRange(param[ConnexionConstantes.RECEIVABLE_INTENTS_KEY].Split(","));
34 1fd64302 Martin Toutant
                // Ajout des intents recevable au IntentFilter
35
                IntentFilter intentFilter = new IntentFilter();
36
                intents.ForEach(intent => intentFilter.AddAction(intent));
37
38 be694ed4 Martin Toutant
                appContext.RegisterReceiver(intentReceiver, intentFilter);
39 d752dab7 Martin Toutant
            }
40
            else
41 1fd64302 Martin Toutant
            {
42 be694ed4 Martin Toutant
                return Task.FromResult(false);
43 1fd64302 Martin Toutant
            }
44 be694ed4 Martin Toutant
            return Task.FromResult(true);
45 1fd64302 Martin Toutant
        }
46
47 340558f2 martin.toutant
        public Task<bool> EnvoiCommande(byte[] commandBytes)
48 1fd64302 Martin Toutant
        {
49 3fa496d6 Martin Toutant
            string command = Encoding.ASCII.GetString(commandBytes);
50
            Intent launchIntent = appContext.PackageManager.GetLaunchIntentForPackage(command);
51 1fd64302 Martin Toutant
            if (launchIntent != null)
52
            {
53
                appContext.StartActivity(launchIntent);
54
                return Task.FromResult(true);
55
            }
56
            return Task.FromResult(false);
57
        }
58
59 340558f2 martin.toutant
        public InternConnexionService()
60 1fd64302 Martin Toutant
        {
61
            intentReceiver = new IntentReceiver();
62 d752dab7 Martin Toutant
            intentReceiver.OnIntentReceived += IntentReceived;
63 1fd64302 Martin Toutant
            IntentFilter intentFilter = new IntentFilter();
64
            appContext = Application.Context.ApplicationContext;
65
        }
66
67 d752dab7 Martin Toutant
        private void IntentReceived(object sender, Intent recIntent)
68 1fd64302 Martin Toutant
        {
69 d752dab7 Martin Toutant
            switch (recIntent.Action)
70
            {
71 340558f2 martin.toutant
                case AgridentConstantes.ACTION_AGRIDENT_SUCCESS:
72
                    string readData = recIntent.GetStringExtra(AgridentConstantes.KEY_BARCODE_DATA);
73
                    DonneesRecuesEvent.Invoke(this, Encoding.ASCII.GetBytes(readData));
74 d752dab7 Martin Toutant
                    break;
75
76 340558f2 martin.toutant
                case AgridentConstantes.ACTION_AGRIDENT_ERROR:
77
                    DonneesRecuesEvent.Invoke(this, Encoding.ASCII.GetBytes(AgridentConstantes.ACTION_AGRIDENT_ERROR));
78 be694ed4 Martin Toutant
                    break;
79
80 d752dab7 Martin Toutant
                default:
81
                    break;
82
            }
83 0875d625 Martin Toutant
        }
84 58c56df1 Martin Toutant
    }
85
}