Autore Topic: Media Player e Handler  (Letto 554 volte)

Offline addre_91

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One
  • Sistema operativo:
    Windows 7
Media Player e Handler
« il: 16 Aprile 2013, 20:36:09 CEST »
0
Sto cercando di sviluppare una semplice sveglia. Ho utilizzato un handler che ogni tot controlla l' ora di sistema, se la sveglia è attiva, e la confronta con l' ora impostata. Fin qui tutto ok. Quando le due ore sono uguali dovrei far partire il MediaPlayer con la canzone. Peccato che dopo aver provato in vari modi non funzioni.

Ecco come ho fatto:
Codice (Java): [Seleziona]
package it.ppsoft.sveglia;

import java.util.Calendar;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.view.Menu;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.TimePicker;

public class MainActivity extends Activity {

        private TextView sveglia;
        private TimePicker imposta_sveglia;
        private Calendar calendario;
        private CheckBox sveglia_attiva;
        private int ora_sveglia, minuti_sveglia;
        private int ora_attuale, minuti_attuali;
        public MediaPlayer mediaPlayer;  
        boolean suona=false;
       
         private final Handler handler = new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        sveglia= new TextView(this);
        imposta_sveglia=new TimePicker(this);
        sveglia_attiva=new CheckBox(this);
       
        sveglia= (TextView)findViewById(R.id.textView1);
        sveglia.setText("");
        imposta_sveglia=(TimePicker)findViewById(R.id.timePicker1);
        imposta_sveglia.setIs24HourView(true);
        sveglia_attiva=(CheckBox)findViewById(R.id.checkBox1);
        handler.postDelayed(runnable, 100);
        mediaPlayer.create(this, R.raw.prova);
        if(suona)
                mediaPlayer.start();  
    }
   
    private Runnable runnable = new Runnable() {
           @Override
           public void run() {
             
                   calendario = Calendar.getInstance();
                   ora_attuale=calendario.get(calendario.HOUR_OF_DAY);
               minuti_attuali=calendario.get(calendario.MINUTE);
               ora_sveglia=imposta_sveglia.getCurrentHour();
               minuti_sveglia=imposta_sveglia.getCurrentMinute();
               if(sveglia_attiva.isChecked()){
             
         if(ora_sveglia==ora_attuale && minuti_attuali==minuti_sveglia){
                        sveglia.setText("Uguali");
                        suona=true;
                        handler.removeCallbacks(runnable); }
                 else
                         sveglia.setText("Diversi");}
               
              handler.postDelayed(this, 100);
           }
        };
}

L' XML non mi sembra rilevante e non lo includo.

Non ricevo errori di compilazione però non funziona comunque.

Grazie per l' attenzione,
Andrea

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Media Player e Handler
« Risposta #1 il: 16 Aprile 2013, 22:51:45 CEST »
0
Al momento non ho il tempo di scendere più nel dettaglio, ma non dovresti impostarla così.
Al posto di controllare ogni tot, dovresti semplicemente usare l'AlarmManager per lanciare un evento all'orario desiderato.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline addre_91

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One
  • Sistema operativo:
    Windows 7
Re:Media Player e Handler
« Risposta #2 il: 17 Aprile 2013, 22:01:39 CEST »
0
Codice (Java): [Seleziona]
package it.ppsoft.sveglia;

import java.util.Calendar;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.view.Menu;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.TimePicker;

public class MainActivity extends Activity {

        public TextView sveglia;
        private TimePicker imposta_sveglia;
        private Calendar calendario;
        private CheckBox sveglia_attiva;
        private int ora_sveglia, minuti_sveglia;
        private int ora_attuale, minuti_attuali;
        public MediaPlayer mediaPlayer;  
        boolean suona=false;
       
         private final Handler handler = new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        sveglia= new TextView(this);
        imposta_sveglia=new TimePicker(this);
        sveglia_attiva=new CheckBox(this);
       
        sveglia= (TextView)findViewById(R.id.textView1);
        sveglia.setText("");
        imposta_sveglia=(TimePicker)findViewById(R.id.timePicker1);
        imposta_sveglia.setIs24HourView(true);
        sveglia_attiva=(CheckBox)findViewById(R.id.checkBox1);
       // handler.postDelayed(runnable, 100);
 
        //Create a new PendingIntent and add it to the AlarmManager
        Intent intent = new Intent(this, Sveglia.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 12345, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        AlarmManager am =  (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
        am.set(AlarmManager.ELAPSED_REALTIME, 5,
                pendingIntent);
       
   
       
    }
}

Codice (Java): [Seleziona]
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.widget.TextView;

public class Sveglia extends Activity {
       
        static MediaPlayer mp;
        TextView sveglia;
       
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sveglia= new TextView(this);
        sveglia.setText("ciao");
 
       mp.create(this, R.raw.prova);
       mp.start();
 
    }
}

Purtroppo sembra non entrare nel timer.
Grazie per l' attenzione,
Andrea