Autore Topic: Intent senza activity  (Letto 617 volte)

Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
Intent senza activity
« il: 20 Dicembre 2014, 18:47:38 CET »
0
Ciao a tutti, premesso che non sono molto pratico ho un problemino con delle intent.
Io ho un programma funzionante con una main activity e qui un pulsante che avvia uno scanner per QRCode con il seguente codice:

Codice: [Seleziona]
Intent intent = new Intent(this,ZBarScannerActivity.class);
                   
            startActivityForResult(intent, ZBAR_SCANNER_REQUEST);

Ora io devo avviare lo scanner da un file non associato a nessuna activity e che fa parte di un progetto basato su workflow, inserendo le stringhe sopra mi da errore.
Guardando un esempio ho visto che in questo file viene avviata la fotocamera con il seguente codice:

Codice: [Seleziona]
Intent photoFromCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                       

                getActivity().startActivityForResult(photoFromCamera,CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);


Dovrei sostituire l'avvio della fotocamera con l'avvio del mio scanner.

Avete idee?

grazie

Offline tonno16

  • Utente storico
  • *****
  • Post: 1186
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Intent senza activity
« Risposta #1 il: 20 Dicembre 2014, 23:23:50 CET »
0
Avrai il tuo scanner nella tua activity chiamata ScannerActivity.

Se sei in una qualsiasi acticity basta fare startActivity(new Intent(ActivityCorrente.this,ScannerActivity.classe))

Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
Re:Intent senza activity
« Risposta #2 il: 21 Dicembre 2014, 13:03:02 CET »
0
Il problema é che io non ho una activity corrente...la classe da dove devo chiamare l'intent non ha una activity corrispo dente...infatti se metto this mi da errore

Offline tonno16

  • Utente storico
  • *****
  • Post: 1186
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Intent senza activity
« Risposta #3 il: 21 Dicembre 2014, 13:18:05 CET »
0
Instanziala passandogli un acticity o context nel costruttore.

Poi fai mContext.startActivity....come prima

Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
Re:Intent senza activity
« Risposta #4 il: 21 Dicembre 2014, 13:46:52 CET »
0
Il codice é questo

Codice: [Seleziona]
public void startCamera(QRCode listener) {
               

               

                   
//Intent photoFromCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);


//                getActivity().startActivityForResult(photoFromCamera,CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
                       
       
       
       
                    Intent intent = new Intent(this,ZBarScannerActivity.class);
                   
            startActivityForResult(intent, ZBAR_SCANNER_REQUEST);
       
       
       
       
       
        }



La parte commentata é quella che c era prima il resto é quelll che vorrei fare

Quindi mi creo una activity che non fa nulla nel costruttore e gli passo quella?

Il context perdonami ma non so cosa sia, riesci a spiegarmelo in 2 righe? Grazie

Offline tonno16

  • Utente storico
  • *****
  • Post: 1186
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Intent senza activity
« Risposta #5 il: 21 Dicembre 2014, 14:04:47 CET »
0
No

Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
Re:Intent senza activity
« Risposta #6 il: 21 Dicembre 2014, 14:16:04 CET »
0
Va bene grazie comunque, se qualcun altro riesce a darmi una mano gliene sarei grato

Offline tonno16

  • Utente storico
  • *****
  • Post: 1186
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Intent senza activity
« Risposta #7 il: 21 Dicembre 2014, 14:23:28 CET »
0
IO non ho capito sinceramente.
Se hai la tua ActivityA e la tua ActivityB.

puoi avviare qualsiasi Intent. Per Intent inteso come fotocamera, sms, chiamata, o altra Activity.

Per avviare una tua Activity se sei un un Activity: startActivity(new Intent(ActivityCorrente.this,ActivityDestinazione.class))
Per avviare una tua Activity se sei fuori da un Activity fai: mContext.startActivity(new Intent.....))

Ovviamente mContext è un oggetto che gli hai passato alla tua classe custom.

Codice (Java): [Seleziona]
public class Prova impleents IProva {
        private Context mContex;
       
        public Prova(Context context){
                mContex = context;
        }
       
        @Override
        public void stampa(String s){
                Toas.makeText(mContex,s,LENGH_SHORT).show()
        }

}

altrimenti non ho capito. il tuo intent è photoFromCamera . Dove sta il problema?

Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
Re:Intent senza activity
« Risposta #8 il: 21 Dicembre 2014, 14:51:51 CET »
0
Io mi ritrovo nel caso di voler avviare una activity non essendo dentro una activity..in questo caso specifico voglio avviare Zbarscanneractivity (che fa avviare la fotocamera per lettura qrcode) da un file che non fa riferimento a nessuna activity.

Non capivo come fare perche non sapevo si potesse fare con context, adesso mi é un po più chiaro...faccio qualche prova e ti faccio sapere.

Grazie mille

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Intent senza activity
« Risposta #9 il: 21 Dicembre 2014, 15:33:50 CET »
0
Io mi ritrovo nel caso di voler avviare una activity non essendo dentro una activity.

Ovunque tu sia (non si capisce bene), esiste sempre un Context. Devi passargli quello.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
Re:Intent senza activity
« Risposta #10 il: 22 Dicembre 2014, 00:04:25 CET »
0
Bradipao io mi trovo in una classe di supporto per un altra classe appartenente a Wade (serve per creare workflow) e da qui dovrei avviare lo scanner per il qrcode. Di fatto questo file non é associato a nessuna activity.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Intent senza activity
« Risposta #11 il: 22 Dicembre 2014, 09:23:39 CET »
0
Bradipao io mi trovo in una classe di supporto per un altra classe appartenente a Wade (serve per creare workflow) e da qui dovrei avviare lo scanner per il qrcode. Di fatto questo file non é associato a nessuna activity.

Allora, dovunque sia usata la tua classe di supporto, l'utilizzatore deve fornirti un Context.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
Re:Intent senza activity
« Risposta #12 il: 22 Dicembre 2014, 11:01:40 CET »
0
Allego l'intero file per far capire meglio:

Codice: [Seleziona]
import java.io.ByteArrayOutputStream;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.hardware.Camera;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;


import com.gabriele.library.ZBarConstants;
import com.gabriele.library.ZBarScannerActivity;
import net.sourceforge.zbar.Symbol;


import com.tilab.wade.performer.interactivity.PictureCamera;
import com.tilab.wade.performer.interactivity.VisualElement;
import com.tilab.wade.performer.interactivity.QRCode;
                                                                                                                   


public class QRCodeViewFactory extends AbstractViewFactory implements InteractionManagerListener {
       
        public static final String COMPONENT_ID = "component_id";
        public static final String PICTURE_DATA = "picture_data";
        private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 1;
        private static final String TAG = "QRCodeViewFactory";              // TAG per il log
       
        //Variabili per lo scanner qrcode
        private static final int ZBAR_SCANNER_REQUEST = 0;
    private static final int ZBAR_QR_SCANNER_REQUEST = 1;
   
   
       

        // protected CameraManager cameraManager;

        protected Camera camera;

        protected QRCode cameraListener;
       
        //private Uri imageURI;

        protected int preferredWidth, preferredHeight;
       
        protected Button button;
       
        // COSTRUTTORE
        public QRCodeViewFactory (InteractionManager interactionManager) {
                super(interactionManager);
               
                button = null;
                camera = null;
               
               
                //preferredWidth = preferredHeight = -1;
               
                preferredWidth = 320;
            preferredHeight = 240;

                // cameraManager = new CameraManager();
        }

               
        // CREA GRAFICA RELATIVA A QRCODE NEL WORKFLOW
        @Override
        public View create (VisualElement visualElement) {
                if (!(visualElement instanceof QRCode))
                        { return createInternalErrorView();}

                QRCode camera = (QRCode) visualElement;
                cameraListener = camera;
               
                Log.d(TAG, "camera hash = " + camera.hashCode());
               
                Context context = getContext();
                               
                LinearLayout linearLayout = new LinearLayout(context);
        linearLayout.setLayoutParams(new ViewGroup.LayoutParams(
                                ViewGroup.LayoutParams.MATCH_PARENT,
                                ViewGroup.LayoutParams.WRAP_CONTENT));

                String label = camera.getLabel();               
                if (label != null) {
                       
                        Log.v(TAG, "non errore4");
                        TextView textView = new TextView(context);

                        textView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);

                        textView.setText(label);

                        textView.setSelected(true);

                        linearLayout.addView(textView);
                }

                linearLayout.addView(createView(camera));         // Aggiunta della View
                return linearLayout;
        }

       
        // VIEW DI QRCODE
        private View createView(final QRCode camera) {
                final Context context = getContext();
               
                LinearLayout linearLayout = new LinearLayout(context);
                linearLayout.setOrientation(LinearLayout.VERTICAL);
                linearLayout.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP);
                linearLayout.setLayoutParams(new ViewGroup.LayoutParams(
                                ViewGroup.LayoutParams.MATCH_PARENT,
                                ViewGroup.LayoutParams.WRAP_CONTENT));

                button = new Button(context);
                button.setText(interactionManager.getString("take_qrcode"));
                button.setLayoutParams(new ViewGroup.LayoutParams(
                                ViewGroup.LayoutParams.MATCH_PARENT,
                                ViewGroup.LayoutParams.WRAP_CONTENT));
                button.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                                startCamera(camera);    //Metodo che si avvia al premere del pulsante
                        }
                });

                linearLayout.addView(button);

                return linearLayout;
        }
       
       
        // Si avvia la fotocamera
        public void startCamera(QRCode listener) {
       
                       
                       
                       
       
                   
       
       
       
       
       
        }


All'inteno di starcamera dovrei avviare l'activity relativa a ZBarScannerActivity che è lo scanner per il qrcode

Post unito: 22 Dicembre 2014, 18:34:39 CET
Risolto usando


Intent myIntent = new Intent(mContext, theNewActivity.class);
mContext.startActivity(myIntent);


Grazie
« Ultima modifica: 22 Dicembre 2014, 18:34:39 CET da Neoxxx, Reason: Merged DoublePost »