{ "id": "150743", "key": "TIMOB-20093", "fields": { "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [], "resolution": null, "resolutiondate": null, "created": "2015-08-26T23:51:47.000+0000", "priority": null, "labels": [], "versions": [], "issuelinks": [], "assignee": null, "updated": "2017-09-21T21:17:13.000+0000", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "components": [ { "id": "10202", "name": "Android", "description": "Android Platform" } ], "description": "If allowBackground set to true, the audio player should be started as a foreground service. See [here|http://developer.android.com/guide/topics/media/mediaplayer.html#mpandservices]\r\n\r\nThe benefits are:\r\n\r\n1. The audio player keeps playing even after the app exits.\r\n2. The system won't accidentally purge the audio player out of memory.\r\n\r\nPlease implement the audio player based on the entire section \"Using a Service with MediaPlayer\" from the docs above. It suggests not only foreground service, but also several tips for a good background audio player. Thanks.\r\n\r\n", "attachment": [], "flagged": false, "summary": "Android Audio Player - playing in the background", "creator": { "name": "shawnlan", "key": "shawnlan", "displayName": "Shawn Lan", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "shawnlan", "key": "shawnlan", "displayName": "Shawn Lan", "active": true, "timeZone": "America/Los_Angeles" }, "environment": null, "comment": { "comments": [ { "id": "364451", "author": { "name": "rmitro", "key": "rmitro", "displayName": "Rakhi Mitro", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Hello,\r\n\r\nTested this issue.Android Audio Player is playing as expected in background.\r\n\r\n*Test Environments:*\r\n\r\n\r\nAppc CLI Version :5.0.1\r\n\r\nTitanium SDK Version5.0.0.GA\r\n\r\nDevice:Nexus 7,5.1.1\r\nAppc Studio: Appcelerator Studio, build: 4.3.0.201509151348\r\n\r\nAlloy: 1.7.6\r\n\r\nMac OS X,Version = 10.10.1.\r\n\r\n\r\n\r\n*Test Steps*:\r\n\r\n* Create a classic project\r\n* Paste sample code to resource directory\r\n* Run project\r\n* Press *home* in device and check Android Audio Player playing or not in the background.\r\n\r\n*Test code:*\r\n\r\n*app.js*\r\n{code}\r\nvar win = Titanium.UI.createWindow({ \r\n title:'Audio Test',\r\n backgroundColor:'#fff',\r\n layout: 'vertical'\r\n});\r\n\r\nvar startStopButton = Titanium.UI.createButton({\r\n title:'Start/Stop Streaming',\r\n top:10,\r\n width:200,\r\n height:40\r\n});\r\n\r\nvar pauseResumeButton = Titanium.UI.createButton({\r\n title:'Pause/Resume Streaming',\r\n top:10,\r\n width:200,\r\n height:40,\r\n enabled:false\r\n});\r\n\r\nwin.add(startStopButton);\r\nwin.add(pauseResumeButton);\r\n\r\n// allowBackground: true on Android allows the \r\n// player to keep playing when the app is in the \r\n// background.\r\nvar audioPlayer = Ti.Media.createAudioPlayer({ \r\n url: 'song.mp3',\r\n allowBackground: true\r\n}); \r\n\r\nstartStopButton.addEventListener('click',function() {\r\n // When paused, playing returns false.\r\n // If both are false, playback is stopped.\r\n if (audioPlayer.playing || audioPlayer.paused)\r\n {\r\n audioPlayer.stop();\r\n pauseResumeButton.enabled = false;\r\n if (Ti.Platform.name === 'android')\r\n { \r\n audioPlayer.release();\r\n } \r\n }\r\n else\r\n {\r\n audioPlayer.start();\r\n pauseResumeButton.enabled = true;\r\n }\r\n});\r\n\r\npauseResumeButton.addEventListener('click', function() {\r\n if (audioPlayer.paused) {\r\n audioPlayer.start();\r\n }\r\n else {\r\n audioPlayer.pause();\r\n }\r\n});\r\n\r\naudioPlayer.addEventListener('progress',function(e) {\r\n Ti.API.info('Time Played: ' + Math.round(e.progress) + ' milliseconds');\r\n});\r\n\r\naudioPlayer.addEventListener('change',function(e)\r\n{\r\n Ti.API.info('State: ' + e.description + ' (' + e.state + ')');\r\n});\r\n\r\nwin.addEventListener('close',function() {\r\n audioPlayer.stop();\r\n if (Ti.Platform.osname === 'android')\r\n { \r\n audioPlayer.release();\r\n }\r\n});\r\n\r\nwin.open();\r\n{code}\r\n\r\n*Test Result:*\r\n\r\nAudio Player is working as expected in the background.\r\n\r\n*Ti logs:*\r\n\r\n{code}\r\n\r\n[INFO] : APSAnalyticsService: Stopping Analytics Service\r\n[INFO] : Time Played: 21342 milliseconds\r\n\r\n[INFO] : Time Played: 22335 milliseconds\r\n\r\n[INFO] : Time Played: 23353 milliseconds\r\n\r\n[INFO] : Time Played: 24320 milliseconds\r\n\r\n[INFO] : Time Played: 25339 milliseconds\r\n\r\n[INFO] : Time Played: 26331 milliseconds\r\n\r\n[INFO] : Time Played: 27350 milliseconds\r\n\r\n[INFO] : Time Played: 28317 milliseconds\r\n\r\n[INFO] : Time Played: 29336 milliseconds\r\n\r\n[INFO] : Time Played: 30354 milliseconds\r\n\r\n[INFO] : Time Played: 31347 milliseconds\r\n\r\n[INFO] : Time Played: 32366 milliseconds\r\n\r\n[INFO] : Time Played: 33437 milliseconds\r\n\r\n[INFO] : Time Played: 34456 milliseconds\r\n\r\n[INFO] : Time Played: 35500 milliseconds\r\n\r\n[INFO] : Time Played: 36519 milliseconds\r\n\r\n[INFO] : Time Played: 37590 milliseconds\r\n\r\n[INFO] : Time Played: 38609 milliseconds\r\n\r\n[INFO] : Time Played: 39680 milliseconds\r\n\r\n[INFO] : Time Played: 40699 milliseconds\r\n\r\n[INFO] : Time Played: 41691 milliseconds\r\n\r\n[INFO] : Time Played: 42710 milliseconds\r\n\r\n[INFO] : Time Played: 43729 milliseconds\r\n\r\n[INFO] : Time Played: 44800 milliseconds\r\n\r\n[INFO] : Time Played: 45819 milliseconds\r\n\r\n[INFO] : Time Played: 46864 milliseconds\r\n\r\n[INFO] : Time Played: 47882 milliseconds\r\n\r\n[INFO] : Time Played: 48953 milliseconds\r\n\r\n[INFO] : Time Played: 49972 milliseconds\r\n\r\n[INFO] : Time Played: 50991 milliseconds\r\n\r\n[INFO] : Time Played: 51984 milliseconds\r\n\r\n[INFO] : Time Played: 53002 milliseconds\r\n\r\n[INFO] : Time Played: 54021 milliseconds\r\n\r\n[INFO] : Time Played: 55092 milliseconds\r\n\r\n[INFO] : Time Played: 56163 milliseconds\r\n\r\n[INFO] : Time Played: 57182 milliseconds\r\n\r\n[INFO] : Time Played: 58175 milliseconds\r\n\r\n[INFO] : Time Played: 59246 milliseconds\r\n\r\n[INFO] : Time Played: 60264 milliseconds\r\n\r\n[INFO] : Time Played: 61336 milliseconds\r\n\r\n[INFO] : Time Played: 62354 milliseconds\r\n\r\n[INFO] : APSAnalyticsService: Analytics Service Started\r\n\r\n[INFO] : Time Played: 63347 milliseconds\r\n\r\n[INFO] : Time Played: 64366 milliseconds\r\n\r\n[INFO] : Time Played: 65384 milliseconds\r\n\r\n[INFO] : APSAnalyticsService: Stopping Analytics Service\r\n\r\n[INFO] : Time Played: 66403 milliseconds\r\n\r\n[INFO] : Time Played: 67422 milliseconds\r\n\r\n[INFO] : Time Played: 68467 milliseconds\r\n\r\n[INFO] : Time Played: 69486 milliseconds\r\n\r\n[INFO] : Time Played: 70557 milliseconds\r\n\r\n[INFO] : Time Played: 71576 milliseconds\r\n\r\n[INFO] : Time Played: 72620 milliseconds\r\n\r\n[INFO] : Time Played: 73639 milliseconds\r\n\r\n[INFO] : Time Played: 74658 milliseconds\r\n\r\n[INFO] : Time Played: 75729 milliseconds\r\n\r\n[INFO] : Time Played: 76696 milliseconds\r\n\r\n[INFO] : Time Played: 77740 milliseconds\r\n\r\n[INFO] : Time Played: 78759 milliseconds\r\n\r\n[INFO] : Time Played: 79778 milliseconds\r\n\r\n[INFO] : Time Played: 80849 milliseconds\r\n\r\n[INFO] : Time Played: 81868 milliseconds\r\n\r\n[INFO] : Time Played: 82860 milliseconds\r\n\r\n[INFO] : Time Played: 83879 milliseconds\r\n\r\n[INFO] : Time Played: 84950 milliseconds\r\n\r\n[INFO] : Time Played: 85969 milliseconds\r\n\r\n[INFO] : Time Played: 87040 milliseconds\r\n\r\n[INFO] : Time Played: 88059 milliseconds\r\n\r\n[INFO] : Time Played: 89051 milliseconds\r\n\r\n[INFO] : Time Played: 90122 milliseconds\r\n\r\n[INFO] : Time Played: 91141 milliseconds\r\n\r\n[INFO] : Time Played: 92160 milliseconds\r\n\r\n[INFO] : Time Played: 93179 milliseconds\r\n\r\n[INFO] : Time Played: 94224 milliseconds\r\n\r\n[INFO] : Time Played: 95242 milliseconds\r\n\r\n[INFO] : Time Played: 96313 milliseconds\r\n\r\n[INFO] : Time Played: 97332 milliseconds\r\n\r\n[INFO] : Time Played: 98403 milliseconds\r\n\r\n[INFO] : Time Played: 99422 milliseconds\r\n\r\n[INFO] : Time Played: 100467 milliseconds\r\n\r\n[INFO] : Time Played: 101486 milliseconds\r\n\r\n[INFO] : Time Played: 102557 milliseconds\r\n\r\n[INFO] : Time Played: 103576 milliseconds\r\n\r\n[INFO] : Time Played: 104620 milliseconds\r\n\r\n[INFO] : Time Played: 105639 milliseconds\r\n\r\n[INFO] : Time Played: 106318 milliseconds\r\n\r\n{code}\r\n\r\nThanks", "updateAuthor": { "name": "rmitro", "key": "rmitro", "displayName": "Rakhi Mitro", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2015-09-21T07:56:48.000+0000", "updated": "2015-11-12T06:16:17.000+0000" }, { "id": "370029", "author": { "name": "shawnlan", "key": "shawnlan", "displayName": "Shawn Lan", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Yes the audio player can play in the background, but it's not as a \"foreground service.\" Please see the Android documentation included in the description. This is not a fix request. This is an improvement request.", "updateAuthor": { "name": "shawnlan", "key": "shawnlan", "displayName": "Shawn Lan", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2015-11-12T06:34:42.000+0000", "updated": "2015-11-12T06:34:42.000+0000" }, { "id": "428283", "author": { "name": "horozco", "key": "horozco", "displayName": "Henry Orozco", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Using a Service with the AudioPlayer is very useful to avoid stop the background audio playback when the Activity gets killed by Android. Please consider support that functionality on the AudioPlayer, I'm using SDK 6.2.2 on my app and every time the Activity of my app is killed the audio playback stops. Thank you!", "updateAuthor": { "name": "horozco", "key": "horozco", "displayName": "Henry Orozco", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2017-09-21T21:16:24.000+0000", "updated": "2017-09-21T21:17:13.000+0000" } ], "maxResults": 4, "total": 4, "startAt": 0 } } }