13 messaggi dal 04 novembre 2020
Buonasera a tutti, sto sviluppando una app con Xamarin per dispositivi Android e devo stampare, via bluetooth su una stampante mobile(Bixolon). Premetto che è la mia prima app, ho trovato comunque nei pacchetti di Nuget un sdk per dispositivi Bixolon(Xam.Plugin.BxlMpXamarinSDK). Vorrei sapere se qualcuno ha già utilizzato questo sdk perchè cercando in rete non sono riuscito a trovare un esempio concreto.
Non riesco a connettermi con la stampante e quindi ad inviargli dei dati.
Spero che qualcuno mi possa aiutare.

Grazie a tutti.
Un saluto.
Felice
843 messaggi dal 08 aprile 2009
in che linguaggio hai il contenuto da stampare?
Cosa devi stampare?

In generale per connetterti al bluetooth o scrivi tu le interfaccie per ogni s/o oppure puoi utilizzare delle librerie cross da nuget.
Io ad esempio utilizzo questa al momento Xam.Plugin.Bluetooth ma a breve la cambio perchè non utilizza il bluetooth in risparmio energetico.

Una volta stabilitta la connessione con l'indirizzo della stampante scrivi sul bluetooth così come se dovessi scrivere un files.
13 messaggi dal 04 novembre 2020
ciao laurar181, ti ringrazio per la risposta.
Devo stampare un semplice file di testo.
Grazie ancora. ciao.
843 messaggi dal 08 aprile 2009
Con la libreria che utilizzo attualmente, per stampare un file di testo faccio in questo modo:

1. Controllo lo stato del bluetooth se è acceso o spento:
 using (var bluetooth = CrossBluetooth.Current)
                {
                    if (bluetooth.IsAvailable)
                    {
                        if (bluetooth.IsTurnedOn == false)
                        {
                            return "Per utilizzare questa funzionalità devi accendere il bluetooth";
                        }


                    }
                    else
                    {
                        return "Questo dispositivo non ha il supporto per il bluetooth";
                    }

                }


2. Cerco il device stampante già accoppiato dalle impostazioni del tablet e di cui io ho l'address perchè ho una maschera nell'app dove precedentemente ho fatto la configurazione
 IBluetoothDevice device = null;
                    using (var bluetooth = CrossBluetooth.Current)
                    {
                        if (bluetooth.IsAvailable)
                        {

                            var lista = await bluetooth.GetPairedDevices();
                            device = lista.FirstOrDefault(f => f.Address == stampante_default.ADDRESS);

                        }
                    }


3.Se ho il devices e la stampante non è in stato già in scrittura (lo controlli con device.IsWriting) mi connetto

 await device.Connect();


4. Se riesco a connettermi alla stampante allora prendo tutte le righe del file di testo e le mando in scrittura sulla stampante riga per riga

 for (int r = 0; r < RigheFile.Count(); r++)
                        {
                            string riga = string.Empty.PadLeft(stampante_default.ShiftChar) + RigheFile[r] + "\r\n";
                            byte[] b_riga = System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(riga);
                            await device.Write(b_riga);

                           

                        }


Per alcune tipo di stampanti è necessario mandare dei comandi di inizio e fine scrittura e quindi qui dovresti vedere il manuale della stampante e mandare i comandi prima e dopo la scrittura delle righe del tuo file
13 messaggi dal 04 novembre 2020
Ciao, ti volevo innanzitutto ringraziare perchè mi hai aiutato nella stampa che adesso mi funziona .
Ti chiedo un'altra cosa, ti è capitato di utilizzare il db SQLite?
A me succede una cosa strana ultimamente, scrivo un record su una tabella e altri relativi su un'altra, tipo testata e dettaglio ma a volte mi capita che dopo un pò non li ritrovo...
Ti è mai capitato o sai quale può essere il motivo?

Grazie.
Ciao.
Felice
843 messaggi dal 08 aprile 2009
Si utilizzo SQLite.
La mia app è come un gestionale e quindi ha un suo DB.
Attento alle librerie che hai installato.

La mia configurazione è questa.

Sul progetto comune Xamarin.Forms:
- sqlite-net-pcl https://github.com/praeclarum/sqlite-net

Sul progetto Android:
- sqlite-net-pcl https://github.com/praeclarum/sqlite-net
- SQLitePCL.bundle_green
- SQLitePCL.plugin.sqlite3.android
- SQLitePCL.raw
- SQLitePCLRaw.bundle_green
- SQLitePCLRaw.core
- SQLitePCLRaw.lib.e_sqlite3.android
- SQLitePCLRaw.provider.e_sqlite3.android

Sul progetto comune Xamarin.Forms ho la classe per istanziare il DB:
    public class MyDataBase
    {
        public object locker = new object();
      
        public SQLiteConnection context;


        public MyDataBase()
        {

           
        }
        public MyDataBase(string DatabaseFilePath)
        {

            locker = new object();

        
                context = new SQLiteConnection(DatabaseFilePath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create | SQLiteOpenFlags.FullMutex, false);
            
        }
}



Quando instanzio l'app inizializzo il mio db e lo salvo in una variabile statica:
MyDataBase miodb = new MyDataBase(path_db);



Esempio di lettura tabella:

            lock (DB.locker)
            {
                return (from item in miodb.context.Table<MIATABELLLA>()
                        select item
                        ).ToList();
            }


Esempio di Insert
   lock (DB.locker)
            {
                miodb.Insert(item);
            }
13 messaggi dal 04 novembre 2020
Ciao e grazie per la tua risposta.
Queste sono le istruzioni per il salvataggio che faccio:

public void AddDocumento(Documento doc, List<DocumentoRighe> righedoc, Sospeso sospeso)
{
  SQLiteConnection conn = new SQLiteConnection(Constants.DatabasePath);
    try
    {
      conn.BeginTransaction();
      
      conn.Insert(doc);
      var IDDocumento = doc.IDDocumento;
      foreach(DocumentoRighe riga in righedoc)
        riga.IDDocumento = IDDocumento;
      
      conn.InsertAll(righedoc);
      conn.Insert(sospeso);  

      conn.Commit();                
    }
    catch(Exception e)
    {
      conn.Rollback();
      throw new Exception(e.Message);
    }            
}  


Succede che subito dopo vedo che sono stati registrati i dati, ma in seguito, magari staccando e ricollegando il telefono al pc non li trovo più e non a caso ma vengono eliminati i record collegati tra loro tra le varie tabelle.
Puoi aiutarmi?
843 messaggi dal 08 aprile 2009
Guarda i parametri che passo io quando istanzio SQLiteConnection.
Attenzione perchè per default SQLite apre il database e ti genera dei files con le modifiche che vengono fatte. Se non sei tu a rilasciarle quando chiudi l'app le modifiche le perdi.

Con i parametri che passo questo non avviene.

Che esensione dai al database che crei?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.