Autore Topic: Simulazione touch per un button  (Letto 1079 volte)

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Simulazione touch per un button
« il: 24 Settembre 2013, 16:10:44 CEST »
0
Salve a tutti,
è possibile simulare il touch di un button?
Mi spiego meglio: in una activity è possibile dopo che si verifichi una certa condizione far premere automaticamente un button??

Offline matttt

Re:Simulazione touch per un button
« Risposta #1 il: 24 Settembre 2013, 18:14:52 CEST »
0
Vuoi proprio l'evento di pressione del tasto?
Altrimenti puoi aggirare la questione spostando il codice che esegui alla pressione del tasto in una funzione X e quando avviene l'altro evento che ti interessa richiami la funzione X...
Le mie apps su Google Play Store:

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Simulazione touch per un button
« Risposta #2 il: 25 Settembre 2013, 09:39:52 CEST »
0
SI su questo sono d'accordo ma supponiamo che lo volessi fare sai se c'è un modo?

Offline matttt

Re:Simulazione touch per un button
« Risposta #3 il: 25 Settembre 2013, 14:16:33 CEST »
0
Allora... puoi provare:
Codice (Java): [Seleziona]
button.performClick();
Le mie apps su Google Play Store:

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Simulazione touch per un button
« Risposta #4 il: 30 Settembre 2013, 17:44:56 CEST »
0
In pratica ciò che dovrei realizzare è il passaggio ad una nuova activity quando il tablet ha portato a termine correttamente il pairing bluetooth. Se vado ad abilitare il tasto di aventi l'applicazione funziona, se invece uso il PerformClick no....

Offline matttt

Re:Simulazione touch per un button
« Risposta #5 il: 30 Settembre 2013, 18:32:38 CEST »
0
Prova ad aggiungere un Message Handler alla tua Activity, quando ricevi l'evento "pairing BT completato con successo" mandi un messaggio all'Activity, da li dovresti poter passare all'activity successiva perché ti troverai nel Thread UI (main)
Le mie apps su Google Play Store:

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Simulazione touch per un button
« Risposta #6 il: 01 Ottobre 2013, 12:41:13 CEST »
0
io ne ho già implementato uno..guarda se mi puoi dare una mano
Codice (Java): [Seleziona]
private Handler mHandler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                        switch (msg.what) {
                        case Shimmer.MESSAGE_STATE_CHANGE:
                                switch (msg.arg1) {
                                case Shimmer.STATE_CONNECTED:
                                        con.updateList();
                                        con.setConnect(true);
                                        next.performClick();
                                        //updateList();
                                        break;
                                case Shimmer.STATE_CONNECTING:
                                        con.addDevices();
                                        break;
                                case Shimmer.STATE_NONE:
                                        if(con.getnConnecteDevices()>0)
                                                con.subDevices();
                                        connectionTry++;
                                        con.updateList();
                                        con.setConnect(false);
                                        //updateList();
                                        //this also stops streaming
                                        break;
                                }
                                break;
                        case Shimmer.MESSAGE_READ:
                        {
                                con.negatemChange();
                                con.messageRead(msg);
                        }
                        break;
                        case Shimmer.MESSAGE_ACK_RECEIVED:
                                break;
                        case Shimmer.MESSAGE_DEVICE_NAME:
                                con.deviceName();
                                break;
                        case Shimmer.MESSAGE_TOAST:
                                //con.toast(msg);
                                break;
                        }
                }
        };

ho inserito il performClick ma non funziona, questo è il logcat
Codice: [Seleziona]
10-01 12:40:18.133: E/AndroidRuntime(15185): FATAL EXCEPTION: main
10-01 12:40:18.133: E/AndroidRuntime(15185): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fisiog/com.fisiosamsung.GUI.ExerciseActivity}: java.lang.ClassCastException: java.lang.Integer cannot be cast to com.fisiosamsung.Control.ConnectionShimmer
10-01 12:40:18.133: E/AndroidRuntime(15185):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
10-01 12:40:18.133: E/AndroidRuntime(15185):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
10-01 12:40:18.133: E/AndroidRuntime(15185):         at android.app.ActivityThread.access$700(ActivityThread.java:140)
10-01 12:40:18.133: E/AndroidRuntime(15185):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
10-01 12:40:18.133: E/AndroidRuntime(15185):         at android.os.Handler.dispatchMessage(Handler.java:99)
10-01 12:40:18.133: E/AndroidRuntime(15185):         at android.os.Looper.loop(Looper.java:137)
10-01 12:40:18.133: E/AndroidRuntime(15185):         at android.app.ActivityThread.main(ActivityThread.java:4921)
10-01 12:40:18.133: E/AndroidRuntime(15185):         at java.lang.reflect.Method.invokeNative(Native Method)
10-01 12:40:18.133: E/AndroidRuntime(15185):         at java.lang.reflect.Method.invoke(Method.java:511)
10-01 12:40:18.133: E/AndroidRuntime(15185):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
10-01 12:40:18.133: E/AndroidRuntime(15185):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
10-01 12:40:18.133: E/AndroidRuntime(15185):         at dalvik.system.NativeStart.main(Native Method)
10-01 12:40:18.133: E/AndroidRuntime(15185): Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to com.fisiosamsung.Control.ConnectionShimmer
10-01 12:40:18.133: E/AndroidRuntime(15185):         at com.fisiosamsung.GUI.ExerciseActivity.onCreate(ExerciseActivity.java:212)
10-01 12:40:18.133: E/AndroidRuntime(15185):         at android.app.Activity.performCreate(Activity.java:5188)
10-01 12:40:18.133: E/AndroidRuntime(15185):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
10-01 12:40:18.133: E/AndroidRuntime(15185):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
10-01 12:40:18.133: E/AndroidRuntime(15185):         ... 11 more


Offline matttt

Re:Simulazione touch per un button
« Risposta #7 il: 01 Ottobre 2013, 20:18:39 CEST »
0
Abbiamo un bel ClassCastException qui :)

Cosa c'è in ExerciseActivity.java:212 ?
Le mie apps su Google Play Store:

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Simulazione touch per un button
« Risposta #8 il: 02 Ottobre 2013, 09:58:16 CEST »
0
ExerciseActivity
Codice (Java): [Seleziona]
protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
                //saveData1();
               
                setContentView(R.layout.exercise);
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

        StrictMode.setThreadPolicy(policy);
       
       
               

                imagefootAngle=0;
                index_exercise=0;
                dataRaw = new String();

                full = (AbsoluteLayout) findViewById(R.id.full_leg);
                foot = (ImageView) findViewById(R.id.foot);

                angleText = (TextView) findViewById(R.id.angle);
                titleAngleText = (TextView) findViewById(R.id.title_angle_exercise);
                mProgress = (ProgressBar) findViewById(R.id.emg_bar);
                warning = (RelativeLayout) findViewById(R.id.flexed_warning);
                repetitions_title= (TextView) findViewById(R.id.repetition_title);
                repetitions= (TextView) findViewById(R.id.repetitions);

                mContext = getApplicationContext();

                //Creating lists to populate
                listExercise = new ArrayList<Exercise>();
               
               

                play_button = (Button) findViewById(R.id.playButton);
                streaming=false;

                AssetFileDescriptor afd;
                player = new MediaPlayer();

                //Get the annoying sound from the assets folder, that is the only file
                //thats stay at the assets folder
                try {
                        afd = getAssets().openFd("sound.wav");
                        player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
                        player.prepare();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

                resetValue();

                //Getting the object that control the Shimmer connection from the MailBox
               
                con = (ConnectionShimmer) IntentMailBox.content.poll();
                 
               
                con.setConnectListener(new ConnectListener()
                {
                        @Override
                        public void onChangeValue(boolean b)
                        {
                                if(!con.deviceConnected(0)||!con.deviceConnected(1))
                                {
                                        Log.d("EXERCISE DOING", ""+index_exercise);
                                        IntentMailBox.content.add(index_exercise);
                                        finish();      
                                }
                        }
                });
                       
                if(!con.deviceConnected(2))
                        mProgress.setVisibility(View.INVISIBLE);

                //Applying the value change listener
                if(con.deviceConnected(3))
                        Listener2();
                else
                        Listener1();

                Switch toggle = (Switch) findViewById(R.id.switchbutton);
                toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                                if (isChecked) {
                                        // The toggle is enabled
                                        sound=true;

                                } else {
                                        sound=false;
                                        // The toggle is disabled
                                }
                        }
                });
ti ho scritto on create, in pratica permette di effettuare degli esercizi e acquisire dei valori

Post unito: 03 Ottobre 2013, 14:52:23 CEST
se io non volessi accedere subito all'activity ma attendere e accedere all'activity tramite un button l'eccezione non si manifesta
« Ultima modifica: 03 Ottobre 2013, 14:52:23 CEST da filipposapo, Reason: Merged DoublePost »

Offline matttt

Re:Simulazione touch per un button
« Risposta #9 il: 03 Ottobre 2013, 18:59:29 CEST »
0
Ok, ma senza numeri di riga è difficile capire dove viene generata l'eccezione... ipotizzo nella riga:
Codice (Java): [Seleziona]
con = (ConnectionShimmer) IntentMailBox.content.poll();?

Quella funzione poll() ritorna un int mi sa, da cui il ClassCastException
Le mie apps su Google Play Store:

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Simulazione touch per un button
« Risposta #10 il: 04 Ottobre 2013, 08:53:03 CEST »
0
Si è quella a generare l'eccezione ma il problema è che se usassi un button per avviare l'activity l'eccezione non si manifesterebbe