Post recenti

Pagine: [1] 2 3 ... 10
1
Se non vado errato quegli attributi vengono usati dal Play Store per filtrare le app (i dispositivi non compatibili non vedranno l'app), ma non impediscono l'installazione se tu hai già l'apk.
Vedi anche:
https://developer.android.com/guide/practices/screens_support.html#DeclaringScreenSizeSupport
2
Programmazione Java per Android / Re:ListView e Picasso...
« Ultimo post da iClaude il Oggi alle 10:58 »
Ciao. Ho cominciato a settembre con AndroidStudio e Java, non conosco bene ancora ne l'ambiente, ne gli oggetti ne tantomeno la filosofia di questo IDE.
Cosa intendi con sistemare l' Adapter ,  non stai utilizzando il pattern ViewHolder ...... Recycler View ...., che roba è, come funziona, a cosa serve ?
Se puoi farmi un piccolo esempio sulla base di quanto io ho postato capirei meglio.. ;-)

Se guardi la risposta di StackOverflow che ho linkato sopra vedrai che nel tuo codice non hai applicato il pattern ViewHolder. Serve per migliorare le prestazioni delle ListView.
3
Buongiorno a tutti,

sto realizzando un app dove la risoluzione minima del display consentita deve essere non inferiore a 320x480. come dico al manifest come controllare la risoluzione del display e quindi indicare se il dispositivo è compatibile con l'app?

grazie per l'aiuto  ;-)

update: ho provato aggiungendo nel manifest il <supports-screens/> settando smallscreen = "false" e nell'elenco degli schermi compatibili (compatible-screens) ho insrito tutti i formati tranne LDPI, ma niente, al momento dell'installazione dell'apk, questa si avvia in un device con uno schermo 240x320.....  conoscete un sistema per che durante l'installazione riconosca il display?

grazie ancora

4
Gestione dei media / FFT di una canzone
« Ultimo post da alesssz il 08 Dicembre 2017, 17:28:26 CET »
Salve a tutti!
Sto sviluppando un Media Player semplice che permette di recuperare tutte le canzoni (indipendentemente dal formato) nello storage esterno dello smartphone per poi poter riprodurre quella selezionata.
La funzionalità aggiuntiva che volevo utilizzare è la possibilità di cliccare su una di quelle canzoni e poi scegliere se riprodurla normalmente,
o se riprodurla visualizzando lo spettro frequienziale del brano....

Ora, io ho trovato questa funzione FTT in pure Java, ma non ho la più pallida idea di come implementarla all'interno di un progetto Android, come visualizzarla (disegnare effettivamente
lo spettro, magari col canvas) e come fornirgli da input i raw data PCM del brano selezionato...qualcuno saprebbe come fare? O perlomeno consigliare?

Codice (Java): [Seleziona]
public final class Fft {
       
        /*
         * Computes the discrete Fourier transform (DFT) of the given complex vector, storing the result back into the vector.
         * The vector can have any length. This is a wrapper function.
         */

        public static void transform(double[] real, double[] imag) {
                int n = real.length;
                if (n != imag.length)
                        throw new IllegalArgumentException("Mismatched lengths");
                if (n == 0)
                        return;
                else if ((n & (n - 1)) == 0)  // Is power of 2
                        transformRadix2(real, imag);
                else  // More complicated algorithm for arbitrary sizes
                        transformBluestein(real, imag);
        }
       
       
        /*
         * Computes the inverse discrete Fourier transform (IDFT) of the given complex vector, storing the result back into the vector.
         * The vector can have any length. This is a wrapper function. This transform does not perform scaling, so the inverse is not a true inverse.
         */

        public static void inverseTransform(double[] real, double[] imag) {
                transform(imag, real);
        }
       
       
        /*
         * Computes the discrete Fourier transform (DFT) of the given complex vector, storing the result back into the vector.
         * The vector's length must be a power of 2. Uses the Cooley-Tukey decimation-in-time radix-2 algorithm.
         */

        public static void transformRadix2(double[] real, double[] imag) {
                // Length variables
                int n = real.length;
                if (n != imag.length)
                        throw new IllegalArgumentException("Mismatched lengths");
                int levels = 31 - Integer.numberOfLeadingZeros(n);  // Equal to floor(log2(n))
                if (1 << levels != n)
                        throw new IllegalArgumentException("Length is not a power of 2");
               
                // Trigonometric tables
                double[] cosTable = new double[n / 2];
                double[] sinTable = new double[n / 2];
                for (int i = 0; i < n / 2; i++) {
                        cosTable[i] = Math.cos(2 * Math.PI * i / n);
                        sinTable[i] = Math.sin(2 * Math.PI * i / n);
                }
               
                // Bit-reversed addressing permutation
                for (int i = 0; i < n; i++) {
                        int j = Integer.reverse(i) >>> (32 - levels);
                        if (j > i) {
                                double temp = real[i];
                                real[i] = real[j];
                                real[j] = temp;
                                temp = imag[i];
                                imag[i] = imag[j];
                                imag[j] = temp;
                        }
                }
               
                // Cooley-Tukey decimation-in-time radix-2 FFT
                for (int size = 2; size <= n; size *= 2) {
                        int halfsize = size / 2;
                        int tablestep = n / size;
                        for (int i = 0; i < n; i += size) {
                                for (int j = i, k = 0; j < i + halfsize; j++, k += tablestep) {
                                        int l = j + halfsize;
                                        double tpre =  real[l] * cosTable[k] + imag[l] * sinTable[k];
                                        double tpim = -real[l] * sinTable[k] + imag[l] * cosTable[k];
                                        real[l] = real[j] - tpre;
                                        imag[l] = imag[j] - tpim;
                                        real[j] += tpre;
                                        imag[j] += tpim;
                                }
                        }
                        if (size == n)  // Prevent overflow in 'size *= 2'
                                break;
                }
        }
       
       
        /*
         * Computes the discrete Fourier transform (DFT) of the given complex vector, storing the result back into the vector.
         * The vector can have any length. This requires the convolution function, which in turn requires the radix-2 FFT function.
         * Uses Bluestein's chirp z-transform algorithm.
         */

        public static void transformBluestein(double[] real, double[] imag) {
                // Find a power-of-2 convolution length m such that m >= n * 2 + 1
                int n = real.length;
                if (n != imag.length)
                        throw new IllegalArgumentException("Mismatched lengths");
                if (n >= 0x20000000)
                        throw new IllegalArgumentException("Array too large");
                int m = Integer.highestOneBit(n) * 4;
               
                // Trignometric tables
                double[] cosTable = new double[n];
                double[] sinTable = new double[n];
                for (int i = 0; i < n; i++) {
                        int j = (int)((long)i * i % (n * 2));  // This is more accurate than j = i * i
                        cosTable[i] = Math.cos(Math.PI * j / n);
                        sinTable[i] = Math.sin(Math.PI * j / n);
                }
               
                // Temporary vectors and preprocessing
                double[] areal = new double[m];
                double[] aimag = new double[m];
                for (int i = 0; i < n; i++) {
                        areal[i] =  real[i] * cosTable[i] + imag[i] * sinTable[i];
                        aimag[i] = -real[i] * sinTable[i] + imag[i] * cosTable[i];
                }
                double[] breal = new double[m];
                double[] bimag = new double[m];
                breal[0] = cosTable[0];
                bimag[0] = sinTable[0];
                for (int i = 1; i < n; i++) {
                        breal[i] = breal[m - i] = cosTable[i];
                        bimag[i] = bimag[m - i] = sinTable[i];
                }
               
                // Convolution
                double[] creal = new double[m];
                double[] cimag = new double[m];
                convolve(areal, aimag, breal, bimag, creal, cimag);
               
                // Postprocessing
                for (int i = 0; i < n; i++) {
                        real[i] =  creal[i] * cosTable[i] + cimag[i] * sinTable[i];
                        imag[i] = -creal[i] * sinTable[i] + cimag[i] * cosTable[i];
                }
        }
       
       
        /*
         * Computes the circular convolution of the given real vectors. Each vector's length must be the same.
         */

        public static void convolve(double[] x, double[] y, double[] out) {
                int n = x.length;
                if (n != y.length || n != out.length)
                        throw new IllegalArgumentException("Mismatched lengths");
                convolve(x, new double[n], y, new double[n], out, new double[n]);
        }
       
       
        /*
         * Computes the circular convolution of the given complex vectors. Each vector's length must be the same.
         */

        public static void convolve(double[] xreal, double[] ximag,
                        double[] yreal, double[] yimag, double[] outreal, double[] outimag) {
               
                int n = xreal.length;
                if (n != ximag.length || n != yreal.length || n != yimag.length
                                || n != outreal.length || n != outimag.length)
                        throw new IllegalArgumentException("Mismatched lengths");
               
                xreal = xreal.clone();
                ximag = ximag.clone();
                yreal = yreal.clone();
                yimag = yimag.clone();
                transform(xreal, ximag);
                transform(yreal, yimag);
               
                for (int i = 0; i < n; i++) {
                        double temp = xreal[i] * yreal[i] - ximag[i] * yimag[i];
                        ximag[i] = ximag[i] * yreal[i] + xreal[i] * yimag[i];
                        xreal[i] = temp;
                }
                inverseTransform(xreal, ximag);
               
                for (int i = 0; i < n; i++) {  // Scaling (because this FFT implementation omits it)
                        outreal[i] = xreal[i] / n;
                        outimag[i] = ximag[i] / n;
                }
        }
       
}
5
Programmazione Java per Android / Re:ListView e Picasso...
« Ultimo post da marcolino461 il 08 Dicembre 2017, 15:48:13 CET »
Ciao. Ho cominciato a settembre con AndroidStudio e Java, non conosco bene ancora ne l'ambiente, ne gli oggetti ne tantomeno la filosofia di questo IDE.
Cosa intendi con sistemare l' Adapter ,  non stai utilizzando il pattern ViewHolder ...... Recycler View ...., che roba è, come funziona, a cosa serve ?
Se puoi farmi un piccolo esempio sulla base di quanto io ho postato capirei meglio.. ;-)
6
Altri problemi / Re:Come variare uno spinner da un altro spinner
« Ultimo post da IL_PAGO il 08 Dicembre 2017, 14:11:39 CET »
GRAZIE DELL INDICAZIONE MA MI GENERA UN ALTRO ERRORE L' INSERIMENTO DELLO SPINNER DENTRO UN ALTRO :
COPIO QUI SOTTO IL LOG:

FATAL EXCEPTION: main
                  Process: com.dooale.dooale, PID: 30492
                  java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on a null object reference
                      at com.dooale.dooale.Find_Place$1.onItemSelected(Find_Place.java:216)
                      at android.widget.AdapterView.fireOnSelected(AdapterView.java:931)
                      at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:920)
                      at android.widget.AdapterView.-wrap1(AdapterView.java)
                      at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:890)
                      at android.os.Handler.handleCallback(Handler.java:751)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:154)
                      at android.app.ActivityThread.main(ActivityThread.java:6119)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

mi dice che il mio puntatore è nullo e non capisco perchè
scrivo qui sotto parte del mio codice:

res= getResources();
            String [] Prodoct_family = res.getStringArray(R.array.Prodoct_family);
            final Spinner NumProdotti = (Spinner) findViewById(R.id.spinner_Prodoct);
            ArrayAdapter<String> adapter_Lista;
            adapter_Lista = new ArrayAdapter<String>(this, layout.simple_spinner_item,Prodoct_family);
            adapter_Lista.setDropDownViewResource(layout.simple_spinner_dropdown_item);
            NumProdotti.setAdapter(adapter_Lista);




            //Gestisco la selezione del prodotto
            NumProdotti.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                    // Se lo spinner è stato selezionato
                    Spinner_Family_position = NumProdotti.getSelectedItemPosition();
                    Spinner_Family_Name= (String) NumProdotti.getSelectedItem();


                 if (Spinner_Family_position == 0 ){
                     // se non ho selezionato niente
                     Toast.makeText(getApplicationContext(),R.string.Not_Selected, Toast.LENGTH_LONG).show();
                 }else {
                     // Se seleziono prodotti e attivo gli altri spinner
                     final Spinner CategoryProdoct = (Spinner) findViewById(R.id.spinner_CategoryADD);

                    if(Spinner_Family_position==1){
                         String [] Prodoct_Category = res.getStringArray(R.array.Meat);
                         ArrayAdapter<String> adapter_category = new ArrayAdapter<String> Find_Place.this,layout.simple_spinner_item , Prodoct_Category);
                         adapter_category.setDropDownViewResource(layout.simple_spinner_dropdown_item);
                         CategoryProdoct.setAdapter(adapter_category);
                        // CategoryProdoct.setOnItemSelectedListener(this);
                         CategoryProdoct.setVisibility(View.VISIBLE);
                     }




7
Programmazione Java per Android / Re:ListView e Picasso...
« Ultimo post da iClaude il 07 Dicembre 2017, 20:26:14 CET »
Ciao.  RISOLTO. Da non credere. Non mi sono accorto di avere un ImageView nascosta con un ID uguale, Picasso faceva solo confusione.
Grazie a tutti comunque

Ok, però ti consiglio ugualmente di sistemare l'adapter perché non stai utilizzando il pattern ViewHolder e questo, specialmente se la lista è lunga, è poco efficiente. O meglio ancora usare una RecyclerView che ormai è lo standard.
8
Programmazione Java per Android / Re:ListView e Picasso...
« Ultimo post da marcolino461 il 07 Dicembre 2017, 20:10:11 CET »
Ciao.  RISOLTO. Da non credere. Non mi sono accorto di avere un ImageView nascosta con un ID uguale, Picasso faceva solo confusione.
Grazie a tutti comunque
9
Programmazione Java per Android / Re:ListView e Picasso...
« Ultimo post da iClaude il 07 Dicembre 2017, 18:44:09 CET »
Cmq per prima cosa ti conviene sistemare l'adapter perché a occhio non hai implementato correttamente il pattern ViewHolder.
Segui questa risposta (la prima risposta accettata):
https://stackoverflow.com/questions/3832254/how-can-i-make-my-arrayadapter-follow-the-viewholder-pattern
10
Multithreading e servizi / Re:Schedulazione con AlarmManager
« Ultimo post da capitancooker il 07 Dicembre 2017, 18:43:30 CET »
Grazie, riproverò nei prossimi giorni.
Ciao,
Marco
Pagine: [1] 2 3 ... 10