intents - ¿Android tiene la intención de reproducir video?
intents android (5)
Intento reproducir videos en Android, lanzando un intento. El código que estoy usando es:
tostart = new Intent(Intent.ACTION_VIEW);
tostart.setDataAndType(Uri.parse(movieurl), "video/*");
startActivity(tostart);
Esto funciona en la mayoría de los teléfonos, pero no en el HTC Hero . Parece cargar un reproductor de video un poco diferente. Esto sí reproduce el primer video lanzado sobre él. Sin embargo, cada video después de eso no responde. (se mantiene en un bucle).
Si agrego un explícito
tostart.setClassName("com.htc.album","com.htc.album.ViewVideo");
(antes de la actividad) funciona en el HTC Hero . Sin embargo, dado que esta es una llamada específica de HTC , no puedo ejecutar este código en otros teléfonos (como el G1 ). En el G1 , esto funciona:
tostart.setClassName("com.android.camera","com.android.camera.MovieView"); //g1 version
Pero esta intención le falta al héroe. ¿Alguien sabe una lista de intents / classnames que deberían ser compatibles con todos los dispositivos Android? ¿O uno específico para lanzar un video? ¡Gracias!
A partir de ahora después de API 24, Uri.parse(filePath)
no funcionará. Necesitas usar esto
final File videoFile = new File("path to your video file");
Uri fileUri = FileProvider.getUriForFile(mContext, "{yourpackagename}.fileprovider", videoFile);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(fileUri, "video/*");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//DO NOT FORGET THIS EVER
startActivity(intent);
Pero antes de usar esto necesitas entender cómo funciona el proveedor de archivos. Vaya al enlace del documento oficial para comprender mejor al proveedor de archivos.
El siguiente código funciona bien para mí.
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(movieurl));
startActivity(intent);
Me he topado con esto con Hero, utilizando lo que pensé que era una API publicada. Al final, utilicé una prueba para ver si se podía recibir el intento:
private boolean isCallable(Intent intent) {
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
En uso cuando por lo general solo comenzaba la actividad:
final Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
if (isCallable(intent)) {
// call the intent as you intended.
} else {
// make alternative arrangements.
}
obvio: si sigues esta ruta, utilizando API no públicas, debes proporcionar un respaldo que definitivamente funcione. No tiene que ser perfecto, puede ser un brindis diciendo que esto no es compatible con este dispositivo / dispositivo, pero debe evitar una excepción no detectada. final obvio.
Encuentro que el Registro de Intentos Abiertos de Protocolos de Intenciones es bastante útil, pero no he encontrado el equivalente de una lista de intentos de tipo TCK que absolutamente debe ser admitida, y ejemplos de qué aplicaciones tienen diferentes teléfonos.
Use setDataAndType en el intento
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(newVideoPath));
intent.setDataAndType(Uri.parse(newVideoPath), "video/mp4");
startActivity(intent);
Use "video / mp4" como MIME o use "video / *" si no conoce el tipo.
de la información de depuración, parece que VideoIntent de MainActivity no puede enviar la ruta del video a VideoActivity . Da un error NullPointerException
de uriString
. Creo que parte de ese código de VideoActivity
:
Intent myIntent = getIntent();
String uri = myIntent.getStringExtra("uri");
Bundle b = myIntent.getExtras();
startVideo(b.getString(uri));
No puede recibir el uri desde aquí:
public void playsquirrelmp4(View v) {
Intent VideoIntent = (new Intent(this, VideoActivity.class));
VideoIntent.putExtra("android.resource://" + getPackageName()
+ "/"+ R.raw.squirrel, uri);
startActivity(VideoIntent);
}