Acceder

Ver la Versión Completa : Actualizacion de aplicacion?


markoster
28/04/15, 13:46:55
Hola buenas, estoy desarrollando una aplicacion para android y tengo un par de dudas, a ver si pueden resolvermelas...

La aplicacion es para reproduccion de videos, y las dudas son:

Tengo la aplicacion con x videos (que no videos x X-D) y quiero poder actualizarla para descargar mas videos, como podria hacer esto? Que al actualizar la aplicacion o mediante un boton o lo que sea se descarguen mas videos al telefono para poder verlos sin internet?

Como digo tendria los videos en el telefono, como puedo hacer para reproducirlos? Hasta ahora utilizo un activity nuevo con un video view, pero un activity para cada video me parece muy mal... Hay alguna forma de reproducir el video con el reproductor preinstalado en el movil, de manera que al pinchar se reproduzca en el reproductor sin usar video views, ni activitys ni nada...?

Como puedo hacer esto? Muchas gracias!

oxot
28/04/15, 14:24:39
Has probado a ejecutar un intent con action_view y un uri que sea el archivo de video?? En teoría te saldría una lista de todas la apps regristradas en el sistema que reproduzcan video para que escojas o simplemente se ejecutaría directamente con la app de vídeo por defecto.

markoster
28/04/15, 17:40:45
Has probado a ejecutar un intent con action_view y un uri que sea el archivo de video?? En teoría te saldría una lista de todas la apps regristradas en el sistema que reproduzcan video para que escojas o simplemente se ejecutaría directamente con la app de vídeo por defecto.

Lo intente, pero no me deja ejecutarlo, en el momento en que deberia ejecutarse sale un mensaje de forzar cierre...

kohario88
28/04/15, 18:02:17
¿Por qué no lo almacenas con un id especifico y cada vez que lo ejecutes que se te abra el activity de reproducción y pase por defecto la id de ese vídeo en cuestión? Al fin y al cabo solo necesitas un paso de parámetros entre activitis. Otra solución es una base de datos interna. Si te fuerza el cierre puede ser o cosa del manifestó o que estas reproduciendo mas de un vídeo a la vez y no lo permite.
¿Qué te pone en el Log cuando se te cierra?

markoster
28/04/15, 18:10:18
¿Por qué no lo almacenas con un id especifico y cada vez que lo ejecutes que se te abra el activity de reproducción y pase por defecto la id de ese vídeo en cuestión? Al fin y al cabo solo necesitas un paso de parámetros entre activitis. Otra solución es una base de datos interna. Si te fuerza el cierre puede ser o cosa del manifestó o que estas reproduciendo mas de un vídeo a la vez y no lo permite.
¿Qué te pone en el Log cuando se te cierra?

No habia pensado en pasarlo... Como podria pasar el id en cuestion?

Ahora hago captura del error y lo pongo

kohario88
28/04/15, 18:28:22
Cada vez que hagas una descarga, tienes que almacenar el nombre del vídeo como un recurso mas y con una id. Te creas un arraylist que beba de la carpeta vídeos(por ejemplo) que este en res. Cada vez que descargues un vídeo, que se añada como elemento al arraylist. Eso te va a servir de indice. Cuando luego pinches un vídeo en la lista desde la que accedas(El que sea) tienes que llamar a a la activiti reproducir pasándole por argumento el value(el id del que hemos hablado antes) del vídeo. Esta cargara el vídeo con dicho valor. Para que te hagas una idea, lo que haces es pasar por referencia el vídeo. Tu tienes una estantería de DVDs y un robot. tu lo que haces es decirle al robot la posición del DVD y este coge la peli y te la pone. No se si eso es a lo que te refieres. Si quieres hacer lo que he entendido este seria un método.

markoster
28/04/15, 18:55:49
Si, eso me serviria bastante...

Y como puedo hacer para descargar los videos nuevos?

kohario88
29/04/15, 10:27:05
Depende de como lo quieras plantear. Imaginemos(Que no lo se) que te bajas vídeos mediante una lista en un activity. El principio es parecido a lo anterior: tienes unos botones que se van creando en una lista personalizada (arraylist personalizado) y los cuales tienen el nombre del vídeo pero en cambio tienen el value de la dirección de descarga. Tendrías que hacer dos métodos. Uno para que añada nuevos elementos a la lista personalizada desde donde estén los vídeos(una pag web, una base de datos...etc. En fin, el método que estés utilizando) y otro método que se llame descarga y que estará en el onclick de dichos botones. Este no solo debe descargarte el vídeo (Contando con que los vas a reproducir siguiendo el método que te dije) sino también añadirle a la lista de vídeos descargados que creaste anteriormente para con su nombre y su id de referencia para que el reproductor te lo coja.
No es por hacerte de menos pero te veo algo verde en temas de listas personalizadas y arraylist. Mi consejo es que primero y antes de meterte en faena te empapes bien de estos y de otros conceptos básicos. Sobre todo te lo comento ya que podrás ver mucho mas fácilmente como hacer diferentes cosas (aunque no sepas hacerlas directamente. Tendrás una idea mejor de lo que quieres) y sera mucho mas fácil para nosotros poder entender el problema exacto y echarte un cable :)

markoster
29/04/15, 17:52:14
Depende de como lo quieras plantear. Imaginemos(Que no lo se) que te bajas vídeos mediante una lista en un activity. El principio es parecido a lo anterior: tienes unos botones que se van creando en una lista personalizada (arraylist personalizado) y los cuales tienen el nombre del vídeo pero en cambio tienen el value de la dirección de descarga. Tendrías que hacer dos métodos. Uno para que añada nuevos elementos a la lista personalizada desde donde estén los vídeos(una pag web, una base de datos...etc. En fin, el método que estés utilizando) y otro método que se llame descarga y que estará en el onclick de dichos botones. Este no solo debe descargarte el vídeo (Contando con que los vas a reproducir siguiendo el método que te dije) sino también añadirle a la lista de vídeos descargados que creaste anteriormente para con su nombre y su id de referencia para que el reproductor te lo coja.
No es por hacerte de menos pero te veo algo verde en temas de listas personalizadas y arraylist. Mi consejo es que primero y antes de meterte en faena te empapes bien de estos y de otros conceptos básicos. Sobre todo te lo comento ya que podrás ver mucho mas fácilmente como hacer diferentes cosas (aunque no sepas hacerlas directamente. Tendrás una idea mejor de lo que quieres) y sera mucho mas fácil para nosotros poder entender el problema exacto y echarte un cable :)

Gracias! Lo mirare :ok:

markoster
30/04/15, 20:13:23
He estado avanzando en la aplicacion, al final voy a guardar los videos en un servidor y usare bases de datos para los videos, pero tengo un problema que no consigo resolver...

Tengo un activity video view al que le paso los videos por referencia como me aconsejasteis, pero da igual que video le pase, en que formato o lo que sea, en todos pone que no se puede reproducir... A que se debe esto?

Habia trabajado antes con videoview y no me daban este problema... alguna ayuda?

Dios en android estoy mas verde de lo que pensaba... :silbando:

kohario88
04/05/15, 11:28:12
Es muy poca información para poder ayudarte :( a ver, puede ser por problemas con la consulta en el server, con los permisos al cargarlo, con el formato o el peso del video etc. No se que mas decirte. Yo en vídeos no controlo tanto como me gustaría. Lo siento :( Te he dicho todo lo que se tal y como lo haría yo. Intenta encontrar el error especifico en el log o probando a buscar videos de diferentes pesos, formatos y direcciones a ver me dices a ver si te puedo echar una mano.

markoster
04/05/15, 18:04:36
He probado con diversos videos, entre ellos algunos de tutoriales sacados de internet pero nada...

Este es mi codigo:



if (v.getId()==R.id.tv1) {
Intent int1=new Intent(this,video.class);
String idn = "R.raw.y1b1w_bc.mp4";
Bundle id = new Bundle();
id.putString("id",idn);
int1.putExtras(id);
startActivity(int1);
}
if (v.getId()==R.id.tv2) {
Intent int1=new Intent(this,video.class);
String idn = "R.raw.y1b1w_6m";
Bundle id = new Bundle();
id.putString("id",idn);
int1.putExtras(id);
startActivity(int1);
}

v1 = (VideoView)findViewById(R.id.v1);
Bundle idR = getIntent().getExtras();
String id = idR.getString("id");
try {
String uri = ("android://com.example.marcos.proyecto1"+id);
v1.setVideoPath(uri);
MediaController mc = new MediaController(this);
v1.setMediaController(mc);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
v1.requestFocus();
v1.start();

Tengo un activity solo para el video al que le paso la ruta a traves de un extra.

No se que puede ser... :(

kohario88
04/05/15, 18:19:34
pasa también lo que te ponga en el log cuando te da fallo en el vídeo por favor :) .

markoster
04/05/15, 18:21:31
Es que en el emulador no lo puedo probar, y en el movil al ejecutarlo me pone:

Este video no se puede reproducir.

Como miro el problema del log?

markoster
04/05/15, 18:25:05
He conseguido esto, no se si tendra algo que ver:

java.lang.IllegalStateException: Could not find a method Star(View) in the activity class com.example.marcos.proyecto1.weapons for onClick handler on view class android.widget.RelativeLayout
at android.view.View$1.onClick(View.java:3816)
at android.view.View.performClick(View.java:4444)
at android.view.View$PerformClick.run(View.java:18457 )
at android.os.Handler.handleCallback(Handler.java:733 )
at android.os.Handler.dispatchMessage(Handler.java:95 )
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.jav a:5034)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:807)
at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:623)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoSuchMethodException: Star [class android.view.View]
at java.lang.Class.getConstructorOrMethod(Class.java: 472)
at java.lang.Class.getMethod(Class.java:857)
at android.view.View$1.onClick(View.java:3809)

markoster
04/05/15, 19:46:03
He creado otro proyecto similar solo para ver si ejecutaba el video, y nada...

Este es el log:

05-04 13:42:33.910 1751-1751/com.example.video D/dalvikvm﹕ Not late-enabling CheckJNI (already on)
05-04 13:42:34.280 1751-1751/com.example.video D/﹕ HostConnection::get() New Host Connection established 0xb78cc600, tid 1751
05-04 13:42:34.460 1751-1751/com.example.video W/EGL_emulation﹕ eglSurfaceAttrib not implemented
05-04 13:42:34.500 1751-1751/com.example.video D/OpenGLRenderer﹕ Enabling debug mode 0
05-04 13:42:34.580 1751-1751/com.example.video D/MediaPlayer﹕ Couldn't open file on client side, trying server side
05-04 13:42:34.610 1751-1762/com.example.video E/MediaPlayer﹕ error (1, -2147483648)
05-04 13:42:34.820 1751-1751/com.example.video D/dalvikvm﹕ GC_FOR_ALLOC freed 72K, 6% free 3155K/3336K, paused 6ms, total 7ms
05-04 13:42:34.860 1751-1751/com.example.video D/dalvikvm﹕ GC_FOR_ALLOC freed 2K, 6% free 3457K/3640K, paused 4ms, total 4ms
05-04 13:42:34.880 1751-1751/com.example.video D/dalvikvm﹕ GC_FOR_ALLOC freed <1K, 5% free 3761K/3944K, paused 14ms, total 14ms
05-04 13:42:34.880 1751-1751/com.example.video D/dalvikvm﹕ GC_FOR_ALLOC freed <1K, 5% free 4065K/4248K, paused 2ms, total 3ms
05-04 13:42:34.990 1751-1751/com.example.video I/Choreographer﹕ Skipped 43 frames! The application may be doing too much work on its main thread.
05-04 13:42:35.160 1751-1751/com.example.video E/MediaPlayer﹕ Error (1,-2147483648)
05-04 13:42:35.160 1751-1751/com.example.video D/VideoView﹕ Error: 1,-2147483648
05-04 13:42:35.260 1751-1751/com.example.video D/dalvikvm﹕ GC_FOR_ALLOC freed 17K, 4% free 4416K/4560K, paused 5ms, total 5ms
05-04 13:42:35.340 1751-1751/com.example.video I/dalvikvm-heap﹕ Grow heap (frag case) to 5.493MB for 1127532-byte allocation
05-04 13:42:35.350 1751-1760/com.example.video D/dalvikvm﹕ GC_FOR_ALLOC freed 2K, 3% free 5514K/5664K, paused 11ms, total 11ms
05-04 13:42:35.640 1751-1751/com.example.video W/EGL_emulation﹕ eglSurfaceAttrib not implemented

Codigo fuente:

package com.example.video;

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.MediaController;
import android.widget.VideoView;


public class MainActivity extends Activity {

VideoView v1;

override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
v1 = (VideoView)findViewById(R.id.v1);
String uri = ("android://com.example.video/"+R.raw.y1b1w_bc);
Uri uric = Uri.parse(uri);
v1.setVideoURI(uric);
MediaController mc = new MediaController(this);
v1.setMediaController(mc);
v1.requestFocus();
v1.start();
}


override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}


Alguna ayuda?

oxot
05/05/15, 17:34:44
MediaPlayer﹕ Error (1,-2147483648) -> Concretamente ese error no da mucha información ya que se trata, digamos, de un error genérico. Un Unknown_Error.
Cuál es el formato del video? Has probado con otros formatos?

markoster
05/05/15, 18:30:54
Si, he probado con varios formatos y videos, entre ellos algunos sacados de tutoriales que aseguran que funcionan... pues a mi nada...

markoster
07/05/15, 13:39:14
Ya lo he solucionado, no se lo que pasaba, pero cambiando la version del gradle se ha solucionado, muchas gracias!

kohario88
08/05/15, 11:22:09
Me alegro de que lo hayas arreglado :)