Post recenti

Pagine: [1] 2 3 ... 10
1
Far partire una Activity da un Service non é una buona pratica x l'utente.
La cosa migliore é lasciar decidere all'utente quando lanciare l'app, ed in tal caso collegare l'Activity al Service, eventualmente in esecuzione, per ricevere i dati. Con un bound Service, tramite un interfaccia (che l'Activity deve implementare) il Service comunica i dati alla Activity solo se questa é connessa.
2
Android Studio e Gradle / Re:Messaggi di errore nel debugging
« Ultimo post da Sime il Oggi alle 11:55 »
Gaurda non so come ma è andato a posto!

Grazie per l'aiuto
3
Livello di difficoltà: medio
Versione SDK utilizzata: 2.1
Link al file compresso del progetto eclipse: file in allegato

In questo tutorial voglio farvi vedere come fare ad avere accesso alla Camera messa a disposizione del vostro device e come poter con questa scattare una foto. Il tutorial si concentra sulle funzionalità base messe a disposizione da android, vuole solo essere un trampolino di lancio, lasciando allo sviluppatore ulteriori accorgimenti per arricchire e migliorare la propria app.

Per iniziare avremo bisogno di una SurfaceView ed una interfaccia SurfaceHolder. Vediamo brevemente di cosa si tratta.
Una SurfaceView, come dice il nome, è una particolare View che permette di disegnare sul display elementi grafici, nel nostro caso la preview proveniente dalla camera. SurfaceHolder è un'interfaccia che ci permette di gestire la SurfaceView, mediante l'utilizzo di particolare operazioni (callback), che ci serviranno per capire quando la Surface verrà creata, quando subirà cambiamenti e quando verrà distrutta.
Utilizzeremo anche la classe Camera, che ci permette di interagire direttamente con il dispositivo hardware del device. La utilizzeremo per occupare la risorsa camera, per rilasciarla, per scattare una foto, per far partire la preview, per settare i parametri come autofocus, flash etc... questi ultimi due avranno bisogno di un tutorial a parte che provvederò a fornire prossimamente.
Infine dovremo utilizzare un'ulteriore interfaccia Camera.PictureCallback per definire le operazioni da fare quando verrà scattata la foto.

Questi sono gli elementi essenziali. Partiamo con il tutorial vero e proprio.  :-)

Per prima cosa creariamo una nostra activity che estenda Activity e (importantissimo!) implementi SurfaceHolder.Callback, altrimenti non saremmo in grado di utilizzare le callback per gestire la surface.
Quello che vogliamo è un'activity che mostri a tutto schermo la camera con un pulsante dedicato per far partire lo scatto. Quindi creiamo la nostra Activity e informiamo Android che vogliamo settare alcuni parametri come essere a full screen e senza la barra di stato.
Codice (Java): [Seleziona]
getWindow().setFormat(PixelFormat.TRANSLUCENT); //aggiungo il traslucido
requestWindowFeature(Window.FEATURE_NO_TITLE);  //no barra titolo
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);   //full screen

Fatto questo recuperiamo la nostra SurfaceView il la nostra SurfaceHolder e diciamo ad Android di collegarla alla nostra Activity. In questo modo la nostra activity risponderà alle chiamate a callback della surface.
Codice (Java): [Seleziona]
mSurfaceView = (SurfaceView)findViewById(R.id.camera_surface);   //recupero il riferimento alla SurfaceView da XML
mSurfaceHolder = mSurfaceView.getHolder();      //recupero l'holder della SurfaceView
mSurfaceHolder.addCallback(this);       //faccio la bind con la nostra activity
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);        // setto tipo di surface, suggerito nei tutorial ufficiali

A questo punto dobbiamo implementare i 3 metodi dell'interfaccia SurfaceHolder: surfaceCreated(), surfaceChanged, surfaceDestroyed(). Tutte e 3 hanno come parametro la SurfaceHolder collegata alla surface creata.
Codice (Java): [Seleziona]
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
        if (mPreviewRunning)
                mCamera.stopPreview();
               
        //setto le preferenze
        Camera.Parameters p = mCamera.getParameters();  //prendo le preferenze della camera
        p.setPreviewSize(arg2, arg3);
        ArrayList<Size> list = (ArrayList<Size>) p.getSupportedPictureSizes();  //recuepro le risoluzioni supportate dalla camera
        int picture_width = list.get(list.size()-1).width;
        int picture_height = list.get(list.size()-1).height;
        p.setPictureSize(picture_width, picture_height);        //setto la camera alla risoluzione più bassa
        p.setJpegQuality(80);   // qualità compressione JPEG
   
        // salvo le pref
        mCamera.setParameters(p);
        try {
                //lancio la preview
                mCamera.setPreviewDisplay(arg0);       
                mCamera.startPreview();
                mPreviewRunning = true;
        } catch (IOException e) {
                        //gestione errore
        }
       
               
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
        mCamera = Camera.open();               
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.stopPreview();
        mPreviewRunning = false;
        mCamera.release();

}

La surfaceCreated viene chiama appena la surface viene creata. Qui dobbiamo semplicemente ottenere l'accesso alla Camera con la open().
La surfaceDestroyed viene chiamata quando la surface o l'activity vengono distrutte. Non facciamo altro che fermare la preview sulla surface e rilasciare la camera (importante).
Nella surfaceChanged che viene chiamata ogni volta che la surface subisce un cambiamento, vengono effettuati i settaggi dei paramentri della camera. E' consigliato effettuare questi settaggi solo quando la preview non è partita, in modo da evitare flickering o crash improvvisi.
La setPreviewSize() mi setta la dimensione di quello che saranno i frames visti a video secondo width e heigth forniti in automatico dalla callback come parametri.
La getSupportedPictureSize restituisce le risoluzioni supportate dalla camera del nostro device. La successiva chiamata a setPictureSize() non fa altro che definire a quale risoluzione vogliamo scattare la foto. Per comodità io l'ho impostata alla più bassa, ma ognuno è ovviamente libero di decidere quale utilizzare.
La setQualityJpeg() credo sia intuitiva... il valore 80 è quello solitamente utilizzato.
Infine coe startPreview() si fa partire la preview sulla nostra surface e visulizziamo cosa la camera sta riprendendo.

Mancano ancora due pezzi del puzzle per concludere il nostro tutorial. Come si fa a scattare la foto?

Ora definiamo l'evento onClick sul pulsante per scattare.
Codice (Java): [Seleziona]
ImageButton buttonPicture = (ImageButton) findViewById(R.id.camera_surface_button);
                buttonPicture.setOnClickListener(new OnClickListener(){
                        public void onClick(View v) {
                                mCamera.takePicture(null, null, jpegCallback);  
                        }
                });

Come vedete è presente un metodo d'istanza di Camera, che si occuperà di fare la foto e che utilizza una serie di callback che vengono chiamate durante lo scatto. E' a discrezione del programmatore utilizzarle a seconda del bisogno. Per approfonditmenti vi rimando alla documentazione ufficiale. A noi interessa l'ultima, che io ho chiamato jpegCallback, che non è altro che la definizione dell'interfaccia Camera.PictureCallback a cui accennavo prima.
Codice (Java): [Seleziona]
PictureCallback jpegCallback = new PictureCallback() {
                public void onPictureTaken(byte[] _data, Camera _camera) {
                        //riparte la preview della camera
                        mCamera.startPreview();
                       
                }
        };

L'evento onPictureTaken fornisce tra i paramentri l'array di byte, che mi rappresenta l'immagine scattata. Sta a noi programmatori decide come utilizzarla, per esempio è possibile salvarla sulla SD card e magari decidere di renderla visibile nella gallery... infine va di nuovo chiamata la startPreview() per far ripartire la camera e renderla nuovamente disponibile a successive foto.  ;-)

Ci sarebbero ancora diverse cose da dire, come per esempio la gestione dell'autofocus o del flash... ma credo che questo sia un buon punto da cui partire.

Vi ricordo che nel Manifest andrà inserito il relativo permesso per utilizzare la Camera
Codice (XML): [Seleziona]
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera"/>
Il primo indica che l'app utilizzerà la CAMERA. Se lasciassi solo questo la mia app avrebbe accesso a tutte le funzionalità della camera del device su cui la mia app è installata, rendola incompatibile se facessei uso a programma di features che non sono supportate dal device. Se invece specifico le features una per una sono più selettivo e indico effettivamente quelle utilizzate. Se invece mi limito a fare come nel tutorial, indicando cioè solo la feature generica android.hardware.camera, dico che non uso nessuna features particolare e rendo la mia app altamente compatibile. Sta a voi anche qui decidere il giusto compromesso a seconda delle necessità.
Maggiori info a riguardo le trovate come sempre nella documentazione ufficiale. QUI.


Sorgenti:

CameraView.java
Codice (Java): [Seleziona]
import java.io.IOException;
import java.util.ArrayList;

import android.app.Activity;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.Size;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class CameraView extends Activity implements SurfaceHolder.Callback{
       
/* VARIABILI PRIVATE */
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
private Camera mCamera;
private boolean mPreviewRunning;
       
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFormat(PixelFormat.TRANSLUCENT); //aggiungo il traslucido
        requestWindowFeature(Window.FEATURE_NO_TITLE);  //no barra titolo
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);   //full screen
        setContentView(R.layout.main);
        ImageButton buttonPicture = (ImageButton) findViewById(R.id.camera_surface_button);
                buttonPicture.setOnClickListener(new OnClickListener(){
                        public void onClick(View v) {
                                mCamera.takePicture(null, null, jpegCallback);
                        }
                });
               
        mSurfaceView = (SurfaceView)findViewById(R.id.camera_surface);
        mSurfaceHolder = mSurfaceView.getHolder();      //recupero l'holder della surfaceview
        mSurfaceHolder.addCallback(this);       //faccio la bind alla nostra activity
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);        //tipo di surface, suggerito nei tutorial ufficiali
    }
   
   
   
    PictureCallback jpegCallback = new PictureCallback() {
                public void onPictureTaken(byte[] _data, Camera _camera) {
                        //riparte la preview della camera
                        mCamera.startPreview();
                       
                }
        };

        @Override
        public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
                if (mPreviewRunning)
                        mCamera.stopPreview();
               
                //setto le preferenze
                Camera.Parameters p = mCamera.getParameters();  //prendo le preferenze della camera
                p.setPreviewSize(arg2, arg3);
                ArrayList<Size> list = (ArrayList<Size>) p.getSupportedPictureSizes();  //recuepro le risoluzioni supportate dalla camera
        int picture_width = list.get(list.size()-1).width;
        int picture_height = list.get(list.size()-1).height;
        p.setPictureSize(picture_width, picture_height);        //setto la camera alla risoluzione più bassa
        p.setJpegQuality(80);   // qualità compressione JPEG
       
        // salvo le pref
        mCamera.setParameters(p);
        try {
                //lancio la preview
                        mCamera.setPreviewDisplay(arg0);       
                        mCamera.startPreview();
                        mPreviewRunning = true;
                } catch (IOException e) {
                        //gestione errore
                }
       
               
        }

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
                mCamera = Camera.open();
               
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.stopPreview();
        mPreviewRunning = false;
        mCamera.release();
               
        }
}


AndroidManifest.xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.tutorial.camera"
     android:versionCode="1"
     android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".CameraView"
                 android:label="@string/app_name"
                 android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="7" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera"/>

</manifest>

main.xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
       
                <SurfaceView android:id="@+id/camera_surface"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:layout_weight="1">
                </SurfaceView>
               
                <RelativeLayout android:id="@+id/camera_surface_footer"
                        android:layout_width="wrap_content"
                        android:layout_height="fill_parent"
                        android:background="#E4E4E4"
                        android:layout_alignRight="@id/camera_surface">
                       
                        <ImageButton android:id="@+id/camera_surface_button"   
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:src="@drawable/icon"
                                android:layout_centerInParent="true"
                                />
                </RelativeLayout>

</RelativeLayout>

Spero di aver fatto cosa gradita e che questa guida possa risultarvi utile.
Ciao vorrei utilizzare il tuo codice per far partire la fotocamera partendo da un azione su un bottone. Quindi nel mio main activity faccio questo:
Codice (Java): [Seleziona]
final Intent intent = new Intent(this, CameraView.class);
final Button button3 = findViewById(R.id.buttonCamera);
button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(intent);
            }
        });

però quando faccio tap sul bottone
Codice: [Seleziona]
E/AndroidRuntime: FATAL EXCEPTION: main
                                                                   Process: kairosdemo.demokairos, PID: 588
                                                                   java.lang.RuntimeException: setParameters failed
                                                                       at android.hardware.Camera.native_setParameters(Native Method)
                                                                       at android.hardware.Camera.setParameters(Camera.java:2073)
                                                                       at kairosdemo.demokairos.CameraView.surfaceChanged(CameraView.java:75)
                                                                       at android.view.SurfaceView.updateWindow(SurfaceView.java:638)
                                                                       at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:162)
                                                                       at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
                                                                       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2247)
                                                                       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1292)
                                                                       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6368)
                                                                       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:873)
                                                                       at android.view.Choreographer.doCallbacks(Choreographer.java:685)
                                                                       at android.view.Choreographer.doFrame(Choreographer.java:621)
                                                                       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:859)
                                                                       at android.os.Handler.handleCallback(Handler.java:754)
                                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                       at android.os.Looper.loop(Looper.java:163)
                                                                       at android.app.ActivityThread.main(ActivityThread.java:6315)
                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
come posso risolvere?
4
Android Studio e Gradle / Re:Messaggi di errore nel debugging
« Ultimo post da berpao il Oggi alle 10:19 »
Ciao, prova a mettere il try/catch anche nell'evento "onCreate" della activity chiamata, molto probabilmente va in errore lì e ti va in crash... inoltre per vedere se l'activity ti viene chiamata, metti anche un breakpoint nella onCreate così vedi se entra o no nell'activity. Io credo di si, ma così ci togliamo il dubbio
Fammi sapere
P
5
Android Studio e Gradle / Re:Messaggi di errore nel debugging
« Ultimo post da Sime il Oggi alle 09:17 »
Un errore che mi sta dando parecchi problemi.
 Ho una activity che mi lanci un'altra activity. Ho messo un try-catch sull'ultima istruzione,startActivity(game);, che non da errore, quindi non entra nel try-catch. Il programma prosegue e va in crash. La seconda activity ovviamente non parte affatto!

 Questo è ciò che ho nell' Android monitor:
Codice (Java): [Seleziona]
09-26 07:02:55.334 19402-19402/? I/art: Not late-enabling -Xcheck:jni (already on)
09-26 07:02:55.484 19402-19402/? W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.simeo.squaremind-1/split_lib_dependencies_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.simeo.squaremind-1@split_lib_dependencies_apk.apk@classes.dex) because non-0 exit status
09-26 07:02:55.805 19402-19402/com.example.simeo.squaremind W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.simeo.squaremind-1/split_lib_slice_0_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.simeo.squaremind-1@split_lib_slice_0_apk.apk@classes.dex) because non-0 exit status
09-26 07:02:55.997 19402-19402/com.example.simeo.squaremind W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.simeo.squaremind-1/split_lib_slice_1_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.simeo.squaremind-1@split_lib_slice_1_apk.apk@classes.dex) because non-0 exit status
09-26 07:02:56.078 19402-19402/com.example.simeo.squaremind W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.simeo.squaremind-1/split_lib_slice_2_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.simeo.squaremind-1@split_lib_slice_2_apk.apk@classes.dex) because non-0 exit status
09-26 07:02:56.139 19402-19402/com.example.simeo.squaremind W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.simeo.squaremind-1/split_lib_slice_3_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.simeo.squaremind-1@split_lib_slice_3_apk.apk@classes.dex) because non-0 exit status
09-26 07:02:56.200 19402-19402/com.example.simeo.squaremind W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.simeo.squaremind-1/split_lib_slice_4_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.simeo.squaremind-1@split_lib_slice_4_apk.apk@classes.dex) because non-0 exit status
09-26 07:02:56.267 19402-19402/com.example.simeo.squaremind W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.simeo.squaremind-1/split_lib_slice_5_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.simeo.squaremind-1@split_lib_slice_5_apk.apk@classes.dex) because non-0 exit status
09-26 07:02:56.344 19402-19402/com.example.simeo.squaremind W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.simeo.squaremind-1/split_lib_slice_6_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.simeo.squaremind-1@split_lib_slice_6_apk.apk@classes.dex) because non-0 exit status
09-26 07:02:56.375 19402-19402/com.example.simeo.squaremind W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.simeo.squaremind-1/split_lib_slice_7_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.simeo.squaremind-1@split_lib_slice_7_apk.apk@classes.dex) because non-0 exit status
09-26 07:02:56.408 19402-19402/com.example.simeo.squaremind W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.simeo.squaremind-1/split_lib_slice_8_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.simeo.squaremind-1@split_lib_slice_8_apk.apk@classes.dex) because non-0 exit status
09-26 07:02:56.435 19402-19402/com.example.simeo.squaremind W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.simeo.squaremind-1/split_lib_slice_9_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.simeo.squaremind-1@split_lib_slice_9_apk.apk@classes.dex) because non-0 exit status
09-26 07:02:56.436 19402-19402/com.example.simeo.squaremind W/System: ClassLoader referenced unknown path: /data/app/com.example.simeo.squaremind-1/lib/x86
09-26 07:02:56.446 19402-19402/com.example.simeo.squaremind I/InstantRun: starting instant run server: is main process
09-26 07:04:14.646 19402-19407/com.example.simeo.squaremind W/art: Suspending all threads took: 14.459ms
09-26 07:06:31.358 19402-19407/com.example.simeo.squaremind W/art: Suspending all threads took: 6.629ms
09-26 07:06:45.418 19402-19407/com.example.simeo.squaremind W/art: Suspending all threads took: 6.278ms
6
Gestione dei dati / Re:Ciclo For-Each Arraylist
« Ultimo post da berpao il Oggi alle 08:12 »
Ciao, non credo di aver capito, sostituire la chiamata alla funzione con la variabile non dovrebbe aver causato il problema, a meno che non ci sia qualche altro tipo di errore. Provi a postare il codice che ti da l'errore così diamo un occhio?
P
7
Android Studio e Gradle / Re:Messaggi di errore nel debugging
« Ultimo post da berpao il Oggi alle 08:09 »
Cioa, mah da quello che scrivi credo che sia perchè non hai un try/catch; mi spiego, se ti compare il messaggio rosso è perchè non hai gestito un try catch e l'app di solito va in crash, mentre se non ti compare credo che sia perchè l'errore è stato intercettato dal try/catch... è solo una ipotesi, riesci ad allegare qualche screenshot di esempio?
ciao
P
8
Però il mio problema è che l'activity è già aperta.

Mi domandavo però: ma facendo come l'ho programmato.cosa succederebbe se l'activity venisse terminata?
Eh praticamente avrei il service che ciclicamente legge dei valori e li manda all'activity in qualche modo, però questa non essendo più in esecuzione non li leggerebbe.
Quindi pensavo a lasciar stare questo continuo passaggio di valori da service ad Activity ed utilizzare invece startService.
In pratica ogni volta che il service ha finito di lavorare termina l'activity (tanto l'alarm manager dovrebbe continuare a lavorare senza fastidi) e ne genera una nuova.
In questo modo tutto funzionerebbe anche se l'activity venisse eliminata.

Devo solo capire se l'allarme impostato all'inizio (cioè dalla prima Activity, prima che venisse cancellata per crearne un'altra) rimane tale e quale o ricomincia a lavorare da capo.

Che ne pensi?
9
La mia idea era questa. Usi un Service ibrido in modo tale che:
1) puoi far partire il Service con startService tramite l'AlarmManager come prima
2) hai un sistema per connettere il Service in esecuzione alla tua Activity quando questa viene aperta

Sto usando un sistema analogo per una piccola app che sto modificando (un registratore audio schedulizzato), ma il codice non è ancora pronto per cui non posso fartelo vedere.
10
Gestione dei dati / Re:Ciclo For-Each Arraylist
« Ultimo post da SF il Ieri alle 18:49 »

Un suggerimento che posso darti invece è che non è molto ottimizzato il fatto di chiamare ad ogni ciclo la funzione getMassaVuoto() (sia per il ciclo for-each che il ciclo for). Io chiamerei fuori dal ciclo la funzione salvando il risultato in una variabile e poi userei quella variabile nel ciclo, una cosa del tipo:

Codice (Java): [Seleziona]
ArrayList listValues=getMassaVuoto();
for (Double massaVuoto : listValues) {
....
}

In questo modo la funzione la chiami solo una volta...
Ciao
P

Ho seguito il tuo suggerimento ma da tipi incompatibili, mi spiego, nel ciclo for da errore tra la variabile Double massaVuoto e l'Arraylist listValues.
Pagine: [1] 2 3 ... 10