/*
* Copyright (C) 2007 The Android Open Source Project
*
* 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.
*/
package com.android.music;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.BroadcastReceiver;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.graphics.Bitmap;
import android.media.audiofx.AudioEffect;
import android.media.AudioManager;
import android.media.AudioManager.OnAudioFocusChangeListener;
import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
import android.media.RemoteControlClient;
import android.media.RemoteControlClient.MetadataEditor;
import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.PowerManager;
import android.os.SystemClock;
import android.os.PowerManager.WakeLock;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.ref.WeakReference;
import java.util.Random;
import java.util.Vector;
/**
* Provides "background" audio playback capabilities, allowing the
* user to switch between activities without stopping playback.
*/
public class MediaPlaybackService extends Service {
/** used to specify whether enqueue() should start playing
* the new list of files right away, next or once all the currently
* queued files have been played
*/
public static final int NOW = 1;
public static final int NEXT = 2;
public static final int LAST = 3;
public static final int PLAYBACKSERVICE_STATUS = 1;
public static final int SHUFFLE_NONE = 0;
public static final int SHUFFLE_NORMAL = 1;
public static final int SHUFFLE_AUTO = 2;
public static final int REPEAT_NONE = 0;
public static final int REPEAT_CURRENT = 1;
public static final int REPEAT_ALL = 2;
public static final String PLAYSTATE_CHANGED = "com.android.music.playstatechanged";
public static final String META_CHANGED = "com.android.music.metachanged";
public static final String QUEUE_CHANGED = "com.android.music.queuechanged";
public static final String SERVICECMD = "com.android.music.musicservicecommand";
public static final String CMDNAME = "command";
public static final String CMDTOGGLEPAUSE = "togglepause";
public static final String CMDSTOP = "stop";
public static final String CMDPAUSE = "pause";
public static final String CMDPLAY = "play";
public static final String CMDPREVIOUS = "previous";
public static final String CMDNEXT = "next";
public static final String TOGGLEPAUSE_ACTION = "com.android.music.musicservicecommand.togglepause";
public static final String PAUSE_ACTION = "com.android.music.musicservicecommand.pause";
public static final String PREVIOUS_ACTION = "com.android.music.musicservicecommand.previous";
public static final String NEXT_ACTION = "com.android.music.musicservicecommand.next";
private static final int TRACK_ENDED = 1;
private static final int RELEASE_WAKELOCK = 2;
private static final int SERVER_DIED = 3;
private static final int FOCUSCHANGE = 4;
private static final int FADEDOWN = 5;
private static final int FADEUP = 6;
private static final int MAX_HISTORY_SIZE = 100;
private MultiPlayer mPlayer;
private String mFileToPlay;
private int mShuffleMode = SHUFFLE_NONE;
private int mRepeatMode = REPEAT_NONE;
private int mMediaMountedCount = 0;
private long [] mAutoShuffleList = null;
private long [] mPlayList = null;
private int mPlayListLen = 0;
private Vector<Integer> mHistory = new Vector<Integer>(MAX_HISTORY_SIZE);
private Cursor mCursor;
private int mPlayPos = -1;
private static final String LOGTAG = "MediaPlaybackService";
private final Shuffler mRand = new Shuffler();
private int mOpenFailedCounter = 0;
String[] mCursorCols = new String[] {
"audio._id AS _id", // index must match IDCOLIDX below
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.MIME_TYPE,
MediaStore.Audio.Media.ALBUM_ID,
MediaStore.Audio.Media.ARTIST_ID,
MediaStore.Audio.Media.IS_PODCAST, // index must match PODCASTCOLIDX below
MediaStore.Audio.Media.BOOKMARK // index must match BOOKMARKCOLIDX below
};
private final static int IDCOLIDX = 0;
private final static int PODCASTCOLIDX = 8;
private final static int BOOKMARKCOLIDX = 9;
private BroadcastReceiver mUnmountReceiver = null;
private WakeLock mWakeLock;
private int mServiceStartId = -1;
private boolean mServiceInUse = false;
private boolean mIsSupposedToBePlaying = false;
private boolean mQuietMode = false;
private AudioManager mAudioManager;
private boolean mQueueIsSaveable = true;
// used to track what type of audio focus loss caused the playback to pause
private boolean mPausedByTransientLossOfFocus = false;
private SharedPreferences mPreferences;
// We use this to distinguish between different cards when saving/restoring playlists.
// This will have to change if we want to support multiple simultaneous cards.
private int mCardId;
private MediaAppWidgetProvider mAppWidgetProvider = MediaAppWidgetProvider.getInstance();
// interval after which we stop the service when idle
private static final int IDLE_DELAY = 60000;
private RemoteControlClient mRemoteControlClient;
private Handler mMediaplayerHandler = new Handler() {
float mCurrentVolume = 1.0f;
@Override
public void handleMessage(Message msg) {
MusicUtils.debugLog("mMediaplayerHandler.handleMessage " + msg.what);
switch (msg.what) {
case FADEDOWN:
mCurrentVolume -= .05f;
if (mCurrentVolume > .2f) {
mMediaplayerHandler.sendEmptyMessageDelayed(FADEDOWN, 10);
} else {
mCurrentVolume = .2f;
}
mPlayer.setVolume(mCurrentVolume);
break;
case FADEUP:
mCurrentVolume += .01f;
if (mCurrentVolume < 1.0f) {
mMediaplayerHandler.sendEmptyMessageDelayed(FADEUP, 10);
} else {
mCurrentVolume = 1.0f;
}
mPlayer.setVolume(mCurrentVolume);
break;
case SERVER_DIED:
if (mIsSupposedToBePlaying) {
next(true);
} else {
// the server died when we were idle, so just
// r
没有合适的资源?快使用搜索试试~ 我知道了~
Android应用源码之Music.zip项目安卓应用源码下载
共448个文件
xml:243个
png:160个
java:36个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 176 浏览量
2022-03-08
03:54:12
上传
评论
收藏 984KB ZIP 举报
温馨提示
Android应用源码之Music.zip项目安卓应用源码下载Android应用源码之Music.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
资源推荐
资源详情
资源评论
收起资源包目录
Android应用源码之Music.zip项目安卓应用源码下载 (448个子文件)
IMediaPlaybackService.aidl 2KB
proguard.flags 98B
HEAD 41B
index 45KB
MediaPlaybackService.java 74KB
TrackBrowserActivity.java 61KB
MusicUtils.java 51KB
MediaPlaybackActivity.java 50KB
ArtistAlbumBrowserActivity.java 35KB
MusicPicker.java 26KB
AlbumBrowserActivity.java 25KB
PlaylistBrowserActivity.java 24KB
QueryBrowserActivity.java 18KB
TouchInterceptor.java 18KB
VerticalTextSpinner.java 17KB
AudioPreview.java 16KB
MediaPickerActivity.java 10KB
SortCursor.java 9KB
MediaAppWidgetProvider.java 8KB
TestSongs.java 8KB
CreatePlaylist.java 7KB
TestPlaylist.java 7KB
RenamePlaylist.java 7KB
MediaButtonIntentReceiver.java 6KB
RepeatingImageButton.java 5KB
VideoBrowserActivity.java 4KB
AlbumsPlaybackStress.java 3KB
MusicPlaybackStress.java 3KB
ScanningProgress.java 3KB
MusicPlayerStability.java 3KB
MusicBrowserActivity.java 3KB
WeekSelector.java 3KB
MusicPlayerNames.java 2KB
DeleteItems.java 2KB
CheckableRelativeLayout.java 2KB
SharedPreferencesCompat.java 2KB
MusicPlayerFunctionalTestRunner.java 2KB
MusicPlayerStressTestRunner.java 2KB
MusicPlayerLaunchPerformance.java 1KB
MusicAlphabetIndexer.java 1KB
CleanSpec.mk 2KB
Android.mk 417B
Android.mk 378B
MODULE_LICENSE_APACHE2 0B
NOTICE 10KB
movie.png 20KB
albumart_mp_unknown.png 17KB
midi.png 11KB
movie.png 9KB
app_music.png 8KB
ic_mp_sd_card.png 7KB
albumart_mp_unknown.png 6KB
ic_menu_eq.png 5KB
ic_menu_set_as_ringtone.png 5KB
midi.png 5KB
albumart_mp_unknown.png 5KB
ic_menu_eq.png 5KB
pickerbox_background.9.png 5KB
ic_menu_delete.png 5KB
ic_menu_party_shuffle.png 4KB
ic_menu_shuffle.png 4KB
app_music.png 4KB
ic_mp_partyshuffle_on_btn.png 4KB
ic_menu_music_library.png 4KB
albumart_mp_unknown.png 4KB
ic_mp_shuffle_on_btn.png 4KB
btn_playback_small_selected.png 4KB
btn_playback_small_pressed.png 3KB
ic_mp_sd_card.png 3KB
ic_mp_repeat_once_btn.png 3KB
ic_launcher_shortcut_music_playlist.png 3KB
stat_notify_musicplayer.png 3KB
app_video.png 3KB
ic_mp_song_list.png 3KB
appwidget_bg.9.png 3KB
ic_menu_set_as_ringtone.png 3KB
ic_mp_playlist_recently_added_list.png 3KB
ic_mp_repeat_all_btn.png 3KB
appwidget_divider.9.png 3KB
appwidget_divider.9.png 3KB
now_playing_progress_handle_selected.png 3KB
ic_menu_party_shuffle.png 3KB
ic_menu_delete.png 3KB
ic_menu_clear_playlist.png 3KB
ic_mp_song_playback.png 3KB
ic_mp_playlist_list.png 3KB
now_playing_progress_handle_pressed.png 3KB
ic_mp_artist_list.png 2KB
ic_search_category_music_song.png 2KB
playlist_tile_longpress.9.png 2KB
ic_tab_songs_selected.png 2KB
btn_playback_small_normal.png 2KB
ic_menu_shuffle.png 2KB
ic_mp_album_playback.png 2KB
ic_menu_music_library.png 2KB
btn_playback_small_selected.png 2KB
ic_mp_song_list.png 2KB
ic_mp_partyshuffle_on_btn.png 2KB
albumart_mp_unknown_list.png 2KB
btn_playback_small_pressed.png 2KB
共 448 条
- 1
- 2
- 3
- 4
- 5
资源评论
yxkfw
- 粉丝: 76
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功