我正在尝试访问用户设备上的媒体文件(音乐)来播放它们; 一个简单的"你好世界" - 音乐播放器应用程序.
我已经按照一些教程,他们基本上给出了相同的代码.但它不起作用; 它一直在崩溃并告诉我:
error.....
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=27696, uid=10059 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
....
Run Code Online (Sandbox Code Playgroud)
现在,这是我的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="slimsimapps.troff" >
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
这是我的Java方法:
public void initialize() {
ContentResolver contentResolver = getContentResolver();
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = contentResolver.query(uri, null, null, null, null); …Run Code Online (Sandbox Code Playgroud) java android audio-player android-music-player android-external-storage
我正在使用套接字作为MediaPlayer的代理,因此我可以在将mp3音频写入套接字之前下载并解密它.这类似于NPR新闻应用程序中显示的示例,但是我将其用于所有Android版本2.1 - 4 atm.
NPR StreamProxy代码 - http://code.google.com/p/npr-android-app/source/browse/Npr/src/org/npr/android/news/StreamProxy.java
我的问题是2.1-2.3的播放速度很快,但在Android 4.0 ICS中,MediaPlayer在触发onPrepared监听器之前会缓冲太多数据.
在onPrepared()之前写入Socket OutputStream的示例数据量:
在SGS2上有2.3.4 - onPrepared()在~133920字节之后
在Nexus S上使用4.0.4 - onPrepared()在~961930字节之后
这也发生在Galaxy Nexus上.
奇怪的是,4.0模拟器不会像4.0设备一样缓冲数据.有人在ICS上遇到与MediaPlayer类似的问题吗?
编辑
以下是代理如何写入套接字.在这个例子中,它来自从文件加载的CipherInputStream,但是当它从HttpResponse加载时也是如此.
final Socket client = (setup above)
// encrypted file input stream
final CipherInputStream inputStream = getInputStream(file);
// setup the socket output stream
final OutputStream output = client.getOutputStream();
// Writing the header
final String httpHeader = buildHttpHeader(file.length());
final byte[] buffer = httpHeader.getBytes("UTF-8");
output.write(buffer, 0, buffer.length);
int writtenBytes = 0;
int readBytes;
final byte[] buff = new …Run Code Online (Sandbox Code Playgroud) 我正在为Android编写一个应用程序来调高音量并播放45秒的歌曲然后停止.这很好,但是我只能将音量提高到50%,有没有办法使用setVolume()将音量调高到100%?
这是我的代码:
final MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
//plays eye of the tiger for 45 seconds
if (messages.contains("MUSIC ONLY")){
//turn up the volume
mp.setVolume(20, 20);
mp.start();
//play ring tone for 45 seconds
new Timer().schedule(new TimerTask() {
@Override
public void run() {
mp.stop();
}
}, 45000);
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个Android的娱乐应用程序.我想播放背景音乐,我想为此服务.应用程序有3个活动,必须在所有活动中播放音乐.此外,当活动暂停时,音乐必须暂停并在销毁时停止.谁能告诉我怎么做?任何链接或示例?
谢谢.
android background-music android-service android-music-player
我正在创建一个音乐播放器应用程序 我想在我的应用程序在后台运行时在通知栏上显示媒体控制器.它看起来像谷歌播放器.

这该怎么做?
我已经编写了完整的音乐播放器来播放来自网络的音乐,但我不知道如何将媒体播放器控件置于通知中以及何时屏幕是锁定.
我按照本教程 在通知栏中显示控件,但仍未获得如何在我的程序中使用相同的功能,我已导入所需的类,如:NotificationService.java和Constants.java.
这是我在通知栏中得到的:
[
]
我很迷惑.为什么我没有得到我正在播放的歌曲的标题,为什么暂停,上一个和下一个按钮不起作用等...
NotificationService.java:
public class NotificationService extends Service {
Notification status;
private final String LOG_TAG = "NotificationService";
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent.getAction().equals(Constants.ACTION.STARTFOREGROUND_ACTION)) {
showNotification();
Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
} else if (intent.getAction().equals(Constants.ACTION.PREV_ACTION)) {
Toast.makeText(this, "Clicked Previous", Toast.LENGTH_SHORT).show();
Log.i(LOG_TAG, "Clicked Previous");
} else if (intent.getAction().equals(Constants.ACTION.PLAY_ACTION)) {
Toast.makeText(this, "Clicked …Run Code Online (Sandbox Code Playgroud) 有没有办法从我的应用程序开始在Google音乐播放器应用程序中播放歌曲?我正在尝试关注代码,但谷歌音乐播放器只打开搜索结果并且实际上不播放该歌曲.
Intent intent = new Intent();
intent.setAction(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH);
intent.putExtra(SearchManager.QUERY, "It's my life");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setPackage("com.google.android.music");
activity.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH的文档说明如下:意图执行搜索音乐媒体并尽可能自动播放结果中的内容.
所以,根据文档,它应该能够播放这首歌.但是,它只会打开搜索结果而不会播放.我在这里缺少什么想法?
谢谢你尽你所能的帮助.
在我的应用程序中,我正在尝试创建一个按钮,单击此按钮可停止播放音乐的所有其他应用程序.我想要的是类似的,如果我通过一个音乐播放器播放音乐,如果我尝试通过第二个音乐播放器播放其他音乐,则当前的音乐播放器停止,然后第二个音乐播放器启动.我们如何阻止其他应用播放当前活动/应用中的音乐?
我正在尝试使用SeekBar来显示MediaPlayer类播放的曲目的长度,并在轨道中启用搜索.
在赛道内寻找效果很好.但是,在播放曲目时使用setProgress更新进度值似乎会导致轻微跳过.
在onCreate方法中,我创建了一个带有循环的Thread,它更新了SeekBar当前轨道的进度值.更改曲目时,此循环将重置.
private void createProgressThread() {
_progressUpdater = new Runnable() {
@Override
public void run() {
//Exitting is set on destroy
while(!_exitting) {
_resetProgress = false;
if(_player.isPlaying()) {
try
{
int current = 0;
int total = _player.getDuration();
progressBar.setMax(total);
progressBar.setIndeterminate(false);
while(_player!=null && current<total && !_resetProgress){
try {
Thread.sleep(1000); //Update once per second
current = _player.getCurrentPosition();
//Removing this line, the track plays normally.
progressBar.setProgress(current);
} catch (InterruptedException e) {
} catch (Exception e){
}
}
}
catch(Exception e)
{
//Don't …Run Code Online (Sandbox Code Playgroud) 我收到以下错误java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA,我想知道这个状态是什么.我正在使用该功能MediaMetaDataRetriever.setDataSource(String filePath)