Git Product home page Git Product logo

musicplayer's Introduction

Android-Clean-Arch-Room-Koin(MusicPlayer)

A Simple Audio Player Android Application which has been implemented using Clean Architecture alongside MVVM design to play (online/offline) songs by running a service in the background and displaying a notification at top of the screen.

The flow of player module which implemented:



The App Scenario:

After selecting songs from your device, they will be saved in database and will be displayed in a playlist. Besides when a list item is clicked, the song player page is displayed whereas player service is run in the background and notification will be displayed at top of the screen.(Clicking on notification has been handled!) Also if you click long on the song item of playlist, it will be removed both from your stored and displayed playlist.



Technologies & Methodologies which used:

  • Koin
  • Clean Architecture
  • MVVM Pattern
  • LiveData
  • Coil(Image Loader)
  • ExoPlayer
  • Mockito

The features of player module:

  • The player service run in the background and can`t be killed until user stops a song.
  • The notification of playing song will be diplayed at top of screen. (both collapse/Expand views were supported)
  • Player actions in use consists of play/pause, skip to next/previous, repeat one song, repeat all songs, shuffle songs,...
  • Supported swiping to left/right side.

Supported Android Versions:

  • Android 4.0.3 Ice Cream Sandwich(API level 16) or higher

Used libraries:

  1. Github - Multidex
  2. Github - Koin
  3. Github - Coil
  4. Github - ExoPlayer
  5. Github - Mockito

License

Copyright (c) 2019 ZARA (https://github.com/ZahraHeydari/).

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

musicplayer's People

Contributors

drjacky avatar zahraheydari avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

musicplayer's Issues

Build Issue

Did any one successfully build this project to an apk?

Can't run MusicPlayer

Hi, I encountered the following error when executing the project

D:\Android\MusicPlayer\app\build\tmp\kapt3\stubs\debug\com\android\musicplayer\data\model\Song.java:8: error: Multiple fields have the same columnName: duration. Field names: duration, duration.
public final class Song extends com.android.player.model.ASong implements android.os.Parcelable {
^

After trying several methods are still unable to run the project order:

  1. Delete .idea file and restart Project.
  2. Build → Clean project → Rebuild Project.
  3. Build → Clean project → Make Project.

Did I miss something?

play error in pixel xl 3 ( android 10.0 )

There is a bug that does not play with the following error when adding music and playing.
The file exists in that path as well.
Changing compileSdkVersion / targetSdkVersion to 28 works fine.

( In addition, the UI should be marked for play failures.)

2019-12-05 16:34:47.018 12149-12149/com.android.musicplayer E/com.android.musicplayer.utils.player.logger.PlayerEventLogger: internalError [0.07, loadError]
com.google.android.exoplayer2.upstream.FileDataSource$FileDataSourceException: java.io.FileNotFoundException: /storage/emulated/0/media/audio/ringtones/NasLifeisBichRasenMixTonollamada.m4a: open failed: EACCES (Permission denied)
at com.google.android.exoplayer2.upstream.FileDataSource.open(FileDataSource.java:73)
at com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:250)
at com.google.android.exoplayer2.upstream.TeeDataSource.open(TeeDataSource.java:53)
at com.google.android.exoplayer2.upstream.cache.CacheDataSource.openNextSource(CacheDataSource.java:479)
at com.google.android.exoplayer2.upstream.cache.CacheDataSource.open(CacheDataSource.java:308)
at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:83)
at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:885)
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:381)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
Caused by: java.io.FileNotFoundException: /storage/emulated/0/media/audio/ringtones/NasLifeisBichRasenMixTonollamada.m4a: open failed: EACCES (Permission denied)
at libcore.io.IoBridge.open(IoBridge.java:496)
at java.io.RandomAccessFile.(RandomAccessFile.java:289)
at java.io.RandomAccessFile.(RandomAccessFile.java:152)
at com.google.android.exoplayer2.upstream.FileDataSource.open(FileDataSource.java:65)
at com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:250) 
at com.google.android.exoplayer2.upstream.TeeDataSource.open(TeeDataSource.java:53) 
at com.google.android.exoplayer2.upstream.cache.CacheDataSource.openNextSource(CacheDataSource.java:479) 
at com.google.android.exoplayer2.upstream.cache.CacheDataSource.open(CacheDataSource.java:308) 
at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:83) 
at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:885) 
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:381) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
at java.lang.Thread.run(Thread.java:919) 
Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
at libcore.io.Linux.open(Native Method)
at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252)
at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7255)
at libcore.io.IoBridge.open(IoBridge.java:482)
at java.io.RandomAccessFile.(RandomAccessFile.java:289) 
at java.io.RandomAccessFile.(RandomAccessFile.java:152) 
at com.google.android.exoplayer2.upstream.FileDataSource.open(FileDataSource.java:65) 
at com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:250) 
at com.google.android.exoplayer2.upstream.TeeDataSource.open(TeeDataSource.java:53) 
at com.google.android.exoplayer2.upstream.cache.CacheDataSource.openNextSource(CacheDataSource.java:479) 
at com.google.android.exoplayer2.upstream.cache.CacheDataSource.open(CacheDataSource.java:308) 
at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:83) 
at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:885) 
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:381) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
at java.lang.Thread.run(Thread.java:919) 

Did not then call Service.startForeground()

Hi, MusicPlayer need to call startForeground() when it use Foreground service.

2020-02-02 09:22:25.769 1534-1566/? E/ActivityManager: ANR in com.android.musicplayer
PID: 10683
Reason: Context.startForegroundService() did not then call Service.startForeground()
Load: 0.57 / 0.49 / 0.79
CPU usage from 29995ms to 0ms ago (2020-02-02 09:21:53.398 to 2020-02-02 09:22:23.393):
38% 1844/com.android.systemui: 32% user + 5.5% kernel / faults: 14150 minor 75 major
14% 696/surfaceflinger: 8.4% user + 6.3% kernel / faults: 581 minor 13 major
13% 666/[email protected]: 6% user + 7.5% kernel / faults: 38 minor
10% 1534/system_server: 4.9% user + 5.3% kernel / faults: 16839 minor 181 major
3.3% 3033/com.asus.launcher: 2.7% user + 0.5% kernel / faults: 11367 minor 116 major
3.1% 3082/com.android.vending: 2.4% user + 0.7% kernel / faults: 5838 minor 27 major
2.9% 251/crtc_commit:111: 0% user + 2.9% kernel
2.3% 258/kgsl_worker_thr: 0% user + 2.3% kernel
1.9% 6751/kworker/u16:15: 0% user + 1.9% kernel
1.8% 4262/com.google.android.googlequicksearchbox:search: 1.6% user + 0.2% kernel / faults: 7234 minor 2 major
1.7% 9625/kworker/u16:10: 0% user + 1.7% kernel
1.5% 9644/kworker/u16:22: 0% user + 1.5% kernel
1.5% 9631/kworker/u16:13: 0% user + 1.5% kernel
1.3% 671/[email protected]: 0.6% user + 0.7% kernel / faults: 86 minor
0.2% 1027/media.codec: 0.1% user + 0% kernel / faults: 4454 minor 19 major
0.9% 562/logd: 0.5% user + 0.4% kernel / faults: 9 minor 5 major
0.9% 2274/com.asus.services: 0.4% user + 0.4% kernel / faults: 1543 minor 74 major
0.9% 2839/adbd: 0.2% user + 0.7% kernel / faults: 1538 minor 1 major
0.7% 2018/com.android.phone: 0.3% user + 0.4% kernel / faults: 1220 minor 69 major
0.6% 7780/com.asus.nextappcore: 0.4% user + 0.2% kernel / faults: 1712 minor 1039 major
0.6% 6755/kworker/u16:16: 0% user + 0.6% kernel
0.6% 9297/com.google.android.gm: 0.3% user + 0.2% kernel / faults: 1130 minor 3 major
0.6% 252/crtc_event:111: 0% user + 0.6% kernel
0.4% 2612/com.google.android.gms: 0.3% user + 0.1% kernel / faults: 316 minor
0.4% 9622/kworker/u16:5: 0% user + 0.4% kernel
0.4% 3175/com.lilithgame.hgame.gp.tw:lilith_sdk: 0.2% user + 0.1% kernel / faults: 1060 minor
0.3% 2455/com.google.android.gms.persistent: 0.2% user + 0.1% kernel / faults: 691 minor
0.3% 146/kswapd0: 0% user + 0.3% kernel
0.3% 563/servicemanager: 0.1% user + 0.2% kernel
0.3% 695/lmkd: 0% user + 0.3% kernel
0.3% 3141/com.facebook.katana: 0.3% user + 0% kernel / faults: 87 minor
0.3% 8407/kworker/1:6: 0% user + 0.3% kernel
0.3% 9925/kworker/0:6: 0% user + 0.3% kernel
0.3% 22551/com.android.chrome:sandboxed: 0% user + 0.2% kernel / faults: 1128 minor 273 major
0.3% 9714/kworker/3:0: 0% user + 0.3% kernel
0.2% 7/rcu_preempt: 0% user + 0.2% kernel
0% 1019/media.extractor: 0% user + 0% kernel / faults: 2514 minor 22 major
0.2% 3894/jp.naver.line.android: 0.2% user + 0% kernel / faults: 18 minor
0.2% 9977/kworker/2:0: 0% user + 0.2% kernel
0.2% 19548/com.facebook.orca:videoplayer: 0.1% user + 0.1% kernel / faults: 1 minor
0.2% 21131/kworker/u17:0: 0% user + 0.2% kernel
0.2% 10/rcuop/0: 0% user + 0.2% kernel
0.2% 102/system: 0% user + 0.2% kernel
0% 1831/com.google.android.apps.inputmethod.zhuyin: 0% user + 0% kernel / faults: 1024 minor 77 major
0.2% 29/rcuop/2: 0% user + 0.2% kernel
0.2% 2723/sugov:0: 0% user + 0.2% kernel
0% 4470/com.asus.deskclock:ui: 0% user + 0% kernel / faults: 216 minor 328 major
0.1% 1//init: 0.1% user + 0% kernel / faults: 157 minor
0.1% 665/[email protected]: 0% user + 0.1% kernel / faults: 7 minor
0% 1982/com.qualcomm.qti.telephonyservice: 0% user + 0% kernel / faults: 1128 minor 84 major
0% 2034/com.qualcomm.qtil.aptxui: 0% user + 0% kernel / faults: 1281 minor 303 major
0.1% 2944/com.android.nfc: 0.1% user + 0% kernel / faults: 1039 minor 84 major
0.1% 681/[email protected]: 0% user + 0.1% kernel / faults: 43 minor
0.1% 962/jbd2/dm-2-8: 0% user + 0.1% kernel
0.1% 1223/msm_irqbalance: 0% user + 0.1% kernel
0% 1998/org.ifaa.andr

License?

What's the license of this repository?

Using wavy sliders?

Hi,

I'm doing a self-promotion here :)
Please ignore/close it if you are not interested.

Would you like to use the wavy-slider in your app?
I think Android 13 uses this kind of slider for its media controls.

Demo.

Although it's for Jetpack Compose, there are ways to use Composables in Views and vice versa.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.