Avisos

Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 25/07/17, 02:16:02
Array

[xs_avatar]
andresking95 andresking95 no está en línea
Usuario poco activo
 
Fecha de registro: jul 2017
Mensajes: 1
Tu operador: Movistar

Solicitar permisos Android

Hola a todos, estoy creando una aplicación para Android, pero la verdad es que soy muy novato y me esta dando muchos errores... Cree un reproductor mp3, pero al momento de iniciar la aplicación se detiene la aplicación y me sale el mensaje en pantalla. Llegue a la conclusión que debe ser un problema de permisos al leer la tarjeta sd, pero el tema es que no se como solicitarlos de manera adecuada. Paso a dejar mis actividades, clases y el manifest, ignorando los layout. Si alguien es tan amable de ayudarme se los agradecería muchísimo.

MainActivity.java :
(Click para mostrar/ocultar)
Código:
package com.app1.appm;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends Activity implements OnCompletionListener {

    public MediaPlayer mp;
    public ImageView play;
    public ImageView next;
    public ImageView plus;
    public Handler mHandler = new Handler();;
    public SongsManager songManager;
    public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
    public int currentSongIndex = 0;

    @override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // All player buttons
        final ImageView play = (ImageView) findViewById(R.id.play);
        final ImageView next = (ImageView) findViewById(R.id.next);
        final ImageView plus = (ImageView) findViewById(R.id.plus);

        // Mediaplayer
        final MediaPlayer mp = new MediaPlayer();
        SongsManager songManager = new SongsManager();

        // Getting all songs list

        songsList = songManager.getPlayList();

        // By default play first song
        playSong(0);

        /**
         * Play button click event
         * plays a song and changes button to pause image
         * pauses a song and changes button to play image
         * */
        play.setOnClickListener(new View.OnClickListener() {

            @override
            public void onClick(View arg0) {
                // check for already playing
                if(mp.isPlaying()){
                        mp.pause();
                        // Changing button image to play button
                        play.setImageResource(R.drawable.play);
                }else{
                        mp.start();
                        // Changing button image to pause button
                        play.setImageResource(R.drawable.pause);
                }

            }
        });


        /**
         * Next button click event
         * Plays next song by taking currentSongIndex + 1
         * */
        next.setOnClickListener(new View.OnClickListener() {

            @override
            public void onClick(View arg0) {
                // check if next song is there or not
                if(currentSongIndex < (songsList.size() - 1)){
                    playSong(currentSongIndex + 1);
                    currentSongIndex = currentSongIndex + 1;
                }else{
                    // play first song
                    playSong(0);
                    currentSongIndex = 0;
                }

            }
        });



        /**
         * Button Click event for Play list click event
         * Launches list activity which displays list of songs
         * */
        plus.setOnClickListener(new View.OnClickListener() {

            @override
            public void onClick(View arg0) {
                Intent i = new Intent(getApplicationContext(), PlayListActivity.class);
                startActivityForResult(i, 100);
            }
        });

    }

    //Permisos

    //

    /**
     * Receiving song index from playlist view
     * and play the song
     * */
    @override
    protected void onActivityResult(int requestCode,
                                    int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode == 100){
            currentSongIndex = data.getExtras().getInt("songIndex");
            // play selected song
            playSong(currentSongIndex);
        }

    }

    /**
     * Function to play a song
     * @param songIndex - index of song
     * */
    public void  playSong(int songIndex) {
        // Play song
        try {
            mp.reset();
            mp.setDataSource(songsList.get(songIndex).get("songPath"));
            mp.prepare();
            mp.start();

            // Changing Button Image to pause image
            play.setImageResource(R.drawable.pause);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @override
    public void onCompletion(MediaPlayer arg0) {
            if(currentSongIndex < (songsList.size() - 1)){
                playSong(currentSongIndex + 1);
                currentSongIndex = currentSongIndex + 1;
            }else{
                // play first song
                playSong(0);
                currentSongIndex = 0;
            }
        }
    @override
    public void onDestroy(){
        super.onDestroy();
        mp.release();
    }

}


PlayListActivity.java :
(Click para mostrar/ocultar)
Código:
package com.app1.appm;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class PlayListActivity extends ListActivity {
    // Songs list
    public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

    @override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playlist);

        ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>();

        SongsManager plm = new SongsManager();
        // get all songs from sdcard
        this.songsList = plm.getPlayList();

        // looping through playlist
        for (int i = 0; i < songsList.size(); i++) {
            // creating new HashMap
            HashMap<String, String> song = songsList.get(i);

            // adding HashList to ArrayList
            songsListData.add(song);
        }

        // Adding menuItems to ListView
        ListAdapter adapter = new SimpleAdapter(this, songsListData,
                R.layout.playlist_item, new String[] { "songTitle" }, new int[] {
                R.id.songTitle });

        setListAdapter(adapter);

        // selecting single ListView item
        ListView lv = getListView();
        // listening to single listitem click
        lv.setOnItemClickListener(new OnItemClickListener() {

            @override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // getting listitem index
                int songIndex = position;

                // Starting new intent
                Intent in = new Intent(getApplicationContext(),
                        MainActivity.class);
                // Sending songIndex to PlayerActivity
                in.putExtra("songIndex", songIndex);
                setResult(100, in);
                // Closing PlayListView
                finish();
            }
        });
    }
}


SongsManager.java (Supongo que aquí está el problema):
(Click para mostrar/ocultar)
Código:
package com.app1.appm;

import android.os.Environment;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.HashMap;

public class SongsManager {
    // SDCard Path
    final String MEDIA_PATH = Environment.getExternalStorageDirectory().getPath() + "/";
    private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

    // Constructor
    public SongsManager(){

    }

    /**
     * Function to read all mp3 files from sdcard
     * and store the details in ArrayList
     * */
    public ArrayList<HashMap<String, String>> getPlayList(){
        File home = new File(MEDIA_PATH);

        if (home.listFiles(new FileExtensionFilter()).length > 0) {
            for (File file : home.listFiles(new FileExtensionFilter())) {
                HashMap<String, String> song = new HashMap<String, String>();
                song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
                song.put("songPath", file.getPath());

                // Adding each song to SongList
                songsList.add(song);
            }
        }
        // return songs list array
        return songsList;
    }

    /**
     * Class to filter files which are having .mp3 extension
     * */
    class FileExtensionFilter implements FilenameFilter {
        public boolean accept(File dir, String name) {
            return (name.endsWith(".mp3") || name.endsWith(".MP3"));
        }
    }
}


Utilities.java :
(Click para mostrar/ocultar)
Código:
package com.app1.appm;

public class Utilities {

    /**
     * Function to convert milliseconds time to
     * Timer Format
     * Hours:Minutes:Seconds
     * */
    public String milliSecondsToTimer(long milliseconds){
        String finalTimerString = "";
        String secondsString = "";

        // Convert total duration into time
        int hours = (int)( milliseconds / (1000*60*60));
        int minutes = (int)(milliseconds % (1000*60*60)) / (1000*60);
        int seconds = (int) ((milliseconds % (1000*60*60)) % (1000*60) / 1000);
        // Add hours if there
        if(hours > 0){
            finalTimerString = hours + ":";
        }

        // Prepending 0 to seconds if it is one digit
        if(seconds < 10){
            secondsString = "0" + seconds;
        }else{
            secondsString = "" + seconds;}

        finalTimerString = finalTimerString + minutes + ":" + secondsString;

        // return timer string
        return finalTimerString;
    }

    /**
     * Function to get Progress percentage
     * @param currentDuration
     * @param totalDuration
     * */
    public int getProgressPercentage(long currentDuration, long totalDuration){
        Double percentage = (double) 0;

        long currentSeconds = (int) (currentDuration / 1000);
        long totalSeconds = (int) (totalDuration / 1000);

        // calculating percentage
        percentage =(((double)currentSeconds)/totalSeconds)*100;

        // return percentage
        return percentage.intValue();
    }

    /**
     * Function to change progress to timer
     * @param progress -
     * @param totalDuration
     * returns current duration in milliseconds
     * */
    public int progressToTimer(int progress, int totalDuration) {
        int currentDuration = 0;
        totalDuration = (int) (totalDuration / 1000);
        currentDuration = (int) ((((double)progress) / 100) * totalDuration);

        // return current duration in milliseconds
        return currentDuration * 1000;
    }
}
Responder Con Cita


  #2  
Viejo 25/07/17, 16:19:15
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

Tienes que aprender antes de nada a mirar las excepciones en la pestaña Android Monitor. Cuando la app se cierra es por una Exception, y suele venir bastante bien explicado qué tipo de excepción, cuál es el mensaje de error, qué línea del código la produce y la secuencia de llamadas a métodos que derivó a ese punto.

Sin mirar en los logs qué línea es la que ha producido el error lo demás es perder el tiempo con elucubraciones y dar palos de ciego. Normalmente aparecerá el nombre de paquete de tu app por ahí entre la ristra de información que sale en el monitor.

Cuando lo tengas, pon el error por aquí y alguien te podrá ayudar, pero sin saber qué error te da poca ayuda puede darse
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 11:29:12 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /