/*
* 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.media.AudioManager;
import android.media.AudioManager.OnAudioFocusChangeListener;
import android.media.MediaPlayer;
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.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
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 PLAYBACK_COMPLETE = "com.android.music.playbackcomplete";
public static final String ASYNC_OPEN_COMPLETE = "com.android.music.asyncopencomplete";
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 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 FADEIN = 4;
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 boolean mOneShot;
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;
// 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 void startAndFadeIn() {
mMediaplayerHandler.sendEmptyMessageDelayed(FADEIN, 10);
}
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 FADEIN:
if (!isPlaying()) {
mCurrentVolume = 0f;
mPlayer.setVolume(mCurrentVolume);
play();
mMediaplayerHandler.sendEmptyMessageDelayed(FADEIN, 10);
} else {
mCurrentVolume += 0.01f;
if (mCurrentVolume < 1.0f) {
mMediaplayerHandler.sendEmptyMessageDelayed(FADEIN, 10);
} else {
mCurrentVolume = 1.0f;
}
mPlayer.setVolume(mCurrentVolume);
}
break;
case SERVER_DIED:
if (mIsSupposedToBePlaying) {
next(true);
} else {
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
android 2 2 音乐播放器 在android Manifest文件中添加<uses sdk android:minSdkVersion "8" > 并将library 改成android 2 2版本即可运行 安装前要把自己android手机上自带的音乐播放器卸载 接着就可以自己阅读调试代码学习啦
资源推荐
资源详情
资源评论
收起资源包目录
android music 音乐播放器 源代码 (290个子文件)
IMediaPlaybackService.aidl 2KB
MediaPlaybackService.java 73KB
TrackBrowserActivity.java 62KB
MusicUtils.java 52KB
MediaPlaybackActivity.java 52KB
ArtistAlbumBrowserActivity.java 36KB
MusicPicker.java 27KB
AlbumBrowserActivity.java 27KB
PlaylistBrowserActivity.java 24KB
QueryBrowserActivity.java 19KB
VerticalTextSpinner.java 17KB
TouchInterceptor.java 16KB
MediaPickerActivity.java 11KB
SortCursor.java 9KB
MediaAppWidgetProvider.java 8KB
CreatePlaylist.java 7KB
RenamePlaylist.java 7KB
MediaButtonIntentReceiver.java 6KB
RepeatingImageButton.java 5KB
StreamStarter.java 4KB
VideoBrowserActivity.java 4KB
ScanningProgress.java 3KB
MusicBrowserActivity.java 3KB
WeekSelector.java 3KB
DeleteItems.java 2KB
CheckableRelativeLayout.java 2KB
MusicAlphabetIndexer.java 1KB
Android.mk 388B
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_set_as_ringtone.png 5KB
midi.png 5KB
albumart_mp_unknown.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
ic_menu_clear_playlist.png 4KB
ic_mp_sd_card.png 3KB
ic_mp_repeat_once_btn.png 3KB
ic_launcher_shortcut_music_playlist.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
ic_menu_party_shuffle.png 3KB
ic_menu_delete.png 3KB
ic_mp_song_playback.png 3KB
ic_mp_playlist_list.png 3KB
ic_mp_artist_list.png 2KB
ic_search_category_music_song.png 2KB
ic_tab_songs_selected.png 2KB
ic_menu_shuffle.png 2KB
ic_mp_album_playback.png 2KB
ic_menu_music_library.png 2KB
ic_mp_song_list.png 2KB
ic_mp_partyshuffle_on_btn.png 2KB
ic_menu_clear_playlist.png 2KB
albumart_mp_unknown_list.png 2KB
ic_menu_play_clip.png 2KB
ic_tab_playback_selected.png 2KB
ic_slide_keyboard.png 2KB
albumart_mp_unknown_list.png 2KB
pickerbox_selected.9.png 2KB
ic_mp_artist_playback.png 2KB
pickerbox_selected.9.png 2KB
ic_launcher_shortcut_music_playlist.png 2KB
ic_mp_shuffle_off_btn.png 2KB
ic_tab_albums_selected.png 2KB
ic_mp_shuffle_on_btn.png 2KB
album_border_large.9.png 2KB
ic_slide_keyboard.png 2KB
ic_mp_repeat_once_btn.png 2KB
app_video.png 2KB
appwidget_bg.9.png 2KB
ic_tab_artists_selected.png 2KB
ic_mp_repeat_all_btn.png 2KB
ic_mp_repeat_off_btn.png 2KB
ic_mp_artist_list.png 2KB
indicator_ic_mp_playing_large.png 1KB
ic_tab_songs_selected.png 1KB
pickerbox_unselected.9.png 1KB
ic_menu_play_clip.png 1KB
pickerbox_unselected.9.png 1KB
album_border_large.9.png 1KB
ic_mp_shuffle_off_btn.png 1KB
共 290 条
- 1
- 2
- 3
jiyong775
- 粉丝: 1
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于springboot旅游推荐系统的设计与实现(部署视频).zip
- 基于vue框架的实时新闻推送平台的设计与实现(部署视频)-kaic.zip
- 基于ssm企业员工岗前培训管理系统的设计与实现(部署视频)-kaic.zip
- 养老院管理系统的设计与实现(部署视频)-kaic.mp4
- 基于Springboot儿童玩具售卖网站的设计与实现(部署视频).zip
- STM32F103C单片机+TJA1050+CP2102 CANBUS总线转USB串口ALTIUM设计硬件(原理图+PCB)工程
- TM1620芯片的仿真,用单片机替代
- 一些简单聚类算法的java实现.zip
- 学生画像可视化系统+课程聚类推荐.zip
- 系统聚类法与k均值聚类法.课程作业的代码,完全是调包且借助了GPT工具,错误欢迎指正 .zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
前往页