Registrarse como reproductor de música y reproducir canciones
Estoy creando una aplicación de reproductor de música y quiero registrar la aplicación como reproductor de música. Así que cuando un usuario hace clic en cualquier canción para jugar, mi aplicación debe ser sugerido como uno de los reproductores de música. Seguí esta guía .
Después de agregar el código necesario en manifest.xml, sólo muestra mi aplicación en sugerencias. Cuando selecciono mi aplicación, no se reproduce nada. Creo que debería haber algo como receptor en la actividad principal para recibir la ruta de los medios de comunicación para reproducir la canción seleccionada. Pero no sé cómo implementar esto.
- Cómo hacer que SearchView pierda el foco y se contraiga al hacer clic en otra parte de la actividad
- Problema de comando DP en la impresora Intermec
- Brooks Pointer en la clase Object
- Redes Android
- Cargador de clases personalizado para android?
He añadido el siguiente código a mi manifest.xml (para referencia):
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="file"/> <data android:mimeType="audio/*"/> <data android:mimeType="application/ogg"/> <data android:mimeType="application/x-ogg"/> <data android:mimeType="application/itunes"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" /> <data android:mimeType="audio/*"/> <data android:mimeType="application/ogg"/> <data android:mimeType="application/x-ogg"/> <data android:mimeType="application/itunes"/> </intent-filter> <intent-filter android:priority="-1"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="content" /> <data android:mimeType="audio/*"/> <data android:mimeType="application/ogg"/> <data android:mimeType="application/x-ogg"/> <data android:mimeType="application/itunes"/> </intent-filter>
- Android NumberPicker que oculta los botones de incremento y decremento
- LoaderManager: cómo agarrar a mi variable / método de mis cargadores?
- Cerrar el cajón de navegación mediante programación de otra clase
- ¿Cómo puedo implementar Google Voice Typing en mi aplicación?
- Cómo Java Binding para Dbus para ejecutarse en Android
- getBeaconParsers (). add throws java.lang.UnsupportedOperationException
- ¿Cómo detectar constantemente las ubicaciones de los marcadores cercanos desde la ubicación actual en Google Maps android?
- API21 nuevo DatePicker ShowWeekNumber Crash
Una vez que haya agregado IntentFilters use getIntent () para obtener los datos de él
@Override protected void onCreate(@Nullable final Bundle savedInstanceState) { super.onCreate(savedInstanceState); handleIntent(getIntent()); } @Override protected void onNewIntent(final Intent intent) { super.onNewIntent(intent); setIntent(intent); handleIntent(intent); } private void handleIntent(@NonNull final Intent intent) { if (Intent.ACTION_VIEW.equals(intent.getAction())) { try { IntentHandler.onActionView(intent); } catch (IOException e) { // Handle error } } }
IntentHandler.java
final class IntentHandler { private static final String TAG = "IntentHandler"; private IntentHandler() { } static void onActionView(@NonNull final Intent intent) throws IOException { final Uri data = intent.getData(); if (data == null) { Log.w(TAG, "Intent data is null"); throw new IOException("Intent data is null"); } final String scheme = data.getScheme(); if (scheme == null) { Log.w(TAG, "Uri scheme is null"); throw new IOException("Uri scheme is null"); } switch (scheme) { case "file": playFile(data); break; case "content": playContent(data); break; case "http": playHttp(data); break; default: Log.w(TAG, "Unhandled Uri scheme: " + scheme); throw new IOException("Unhandled Uri scheme: " + scheme); } } private static void playFile(@NonNull final Uri data) throws IOException { Log.d(TAG, "playFile() path = " + data.getPath()); // Play a plain file } private static void playContent(@NonNull final Uri data) throws IOException { Log.d(TAG, "playContent() " + data); // Use ContentResovler to query the Uri } private static void playHttp(@NonNull final Uri data) throws IOException { Log.d(TAG, "playHttp() " + data); // Play from network } }
Si no es compatible con la reproducción de ContentProvider o de la red, elimine IntentFilter para "http" o "contenido" de acuerdo con AndroidManifest.xml
¿Has probado estos filtros de intención?
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="file"/> <data android:scheme="content"/> <data android:host="*"/> <data android:mimeType="audio/*"/> <data android:mimeType="application/ogg"/> <data android:mimeType="application/x-ogg"/> ... </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="file"/> <data android:scheme="content"/> <data android:host="*"/> <data android:pathPattern=".*\.mp3"/> <data android:pathPattern=".*\.ogg"/> <data android:pathPattern=".*\.wav"/> <data android:pathPattern=".*\.wma"/> <data android:pathPattern=".*\.flac"/> ... </intent-filter> <intent-filter> <action android:name="android.intent.action.GET_CONTENT" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="audio/*"/> </intent-filter>
Entonces en su actividad:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... Intent i = getIntent(); Uri u = i.getData(); String a = i.getAction(); if ((u != null) && (a != null) && (a.equalsIgnoreCase("android.intent.action.VIEW"))) { String filename = null; if (i.getScheme().equalsIgnoreCase("file")) { filename = u.getPath(); } else if (i.getScheme().equalsIgnoreCase("content")) { try { String[] filepathcolumn = {MediaStore.Audio.Media.DATA}; Cursor cursor1 = getContentResolver().query(u, filepathcolumn, null, null, null); cursor1.moveToFirst(); int columnindex1 = cursor1.getColumnIndex(filepathcolumn[0]); filename = cursor1.getString(columnindex1); cursor1.close(); } catch (Exception e) { e.printStackTrace(); } } if (filename != null) { ... } }
}
Creo que sólo se define el reproductor de música por defecto cuando la canción se selecciona en el archivo de manifiesto y también escribir el código de servicio que se ejecutan en el hilo principal para reproducir la canción.
Trate de usar el código de abajo
<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="file" android:mimeType="audio/*" /> </intent-filter>
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="file"/> <data android:mimeType="audio/*"/> <data android:mimeType="application/ogg"/> <data android:mimeType="application/x-ogg"/> <data android:mimeType="application/itunes"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" /> <data android:mimeType="audio/*"/> <data android:mimeType="application/ogg"/> <data android:mimeType="application/x-ogg"/> <data android:mimeType="application/itunes"/> </intent-filter> <intent-filter android:priority="-1"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="content" /> <data android:mimeType="audio/*"/> <data android:mimeType="application/ogg"/> <data android:mimeType="application/x-ogg"/> <data android:mimeType="application/itunes"/> </intent-filter>
- Cómo aumentar el tamaño de transport.dump de 256 bytes a 512 o más bytes en KSOAP2?
- Android: ¿A qué se refiere este mensaje de advertencia? – (WebCore)