- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这个问题可能与 this question 重复但我发现代码有些不同,所以我提出了一个新问题。
问题是我无法在 RingtonePicker 中设置选取的铃声。我用 Support Library和 AndroidAnnotations ,也许它会导致这样的问题(尽管我对此表示怀疑)。
我有一个带有按钮的 fragment 。单击按钮时,将触发 RingtonePicker。用户选择铃声,应用程序将其保存在 SharedPreference 中。下次当用户打开 RingtonePicker 时,应该检查之前选择的铃声,我不能这样做。
这是我的 fragment
@EFragment(R.layout.pref_page)
public class PrefPage extends Fragment {
@Pref
MyPrefs_ myPrefs;
@Click(R.id.ringtone_button)
public void onClick() {
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,
RingtoneManager.TYPE_NOTIFICATION);
String uri = myPrefs.beepUri().get();
if (uri != "") {
Log.i("Log", "uri is " + uri);
RingtoneManager.setActualDefaultRingtoneUri(
getActivity(),
RingtoneManager.TYPE_NOTIFICATION,
Uri.parse(uri));
}
startActivityForResult(intent, 1);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == -1) {
Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
if (uri != null) {
String uriString = uri.toString();
Log.i("Log", "uriString is " + uriString);
myPrefs.edit().beepUri().put(uriString).apply();
}
}
}
}
两个词的问题是 - 为什么 RingtoneManager.setActualDefaultRingtoneUri 在这里不起作用?
更新:
我的 list 中有 WRITE_SETTINGS 权限。
<uses-permission android:name="android.permission.WRITE_SETTINGS" ></uses-permission>
最佳答案
好的,我遇到了和你一样的问题。我假设您传入的 Uri 是您 Assets 中的一个文件,或者来自您存储在首选项文件中的磁盘。在这种假设下工作,问题是您不能将 Uri 插入 RingtoneManager 并期望它接受它。文件 uri 应该来自内容解析器。
如果有人能告诉我这是为什么,我会很高兴,但我不是专家,所以我现在接受它。话虽这么说,这段代码会让你获取一个 Uri 并将其设置为默认铃声。
//We get the Uri here fro ma file's absolute path.
Uri ringtoneUri = Uri.parse(file.getAbsolutePath());
//We now create a new content values object to store all the information
//about the ringtone.
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, chosenFile.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, chosenFile.getName());
values.put(MediaStore.MediaColumns.SIZE, chosenFile.length());
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(AudioColumns.ARTIST, context.getString(R.string.app_name));
values.put(AudioColumns.IS_RINGTONE, true);
values.put(AudioColumns.IS_NOTIFICATION, false);
values.put(AudioColumns.IS_ALARM, false);
values.put(AudioColumns.IS_MUSIC, false);
//Work with the content resolver now
//First get the file we may have added previously and delete it,
//otherwise we will fill up the ringtone manager with a bunch of copies over time.
Uri uri = MediaStore.Audio.Media.getContentUriForPath(chosenFile.getAbsolutePath());
context.getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + chosenFile.getAbsolutePath() + "\"", null);
//Ok now insert it
Uri newUri = context.getContentResolver().insert(uri, values);
//Ok now set the ringtone from the content manager's uri, NOT the file's uri
RingtoneManager.setActualDefaultRingtoneUri(
context,
RingtoneManager.TYPE_RINGTONE,
newUri
);
关于android - 为什么 RingtoneManager.setActualDefaultRingtoneUri 不起作用? [安卓 API-8],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13352416/
我使用一个简单的选择器对话框让用户选择通知声音,下面是启动选择器的代码: Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PIC
我希望能够向 RingtoneManager 添加铃声文件,甚至可能是整个文件夹路径,这样当我调用 RINGTONE_PICKER 操作 Activity 时,它的光标将包含的不仅仅是默认铃声。 这听
我正在使用 RingtoneManager,显然在某些手机上它一直返回 null。我知道如果声音是无声的或找不到音调,它会返回 null。开声音有提示音为什么会返回null?该代码适用于我的 nexu
我尝试在这里找到解决方案,但只有自己/选择的文件的解决方案,而不是我调用选择器时的代码。当用户按下按钮时,我使用以下代码: Intent intent = new Intent(RingtoneMan
我正在尝试为我的 Android 应用程序添加自定义铃声。我所做的就是在 res 目录中创建一个 raw 文件夹,并使用下面的代码在其中添加一个 mp3 文件作为铃声。一些如何在调用此铃声时仅播放 A
希望是一个基本的(学校项目)问题: 在接下来的代码中,我试图在 Alerts.java 中定义一个实例方法,以便在满足 SensorService.java 中的条件时生成铃声。 为了调试,我添加了
目前我正在使用以下代码播放铃声: Ringtone ringtone = RingtoneManager.getRingtone(this, Uri.parse(selectedRingtone));
如何从 R.raw 设置 Sound RingtoneManager.... 我想设置我的声音,但我不知道如何设置 Uri defaultRingtoneUri = RingtoneManager.g
我目前正尝试在 LG optimus 上将原始文件作为铃声播放。 Uri uri = Uri.parse("android.resource://" + curContext.getPackageNa
这是一个简单的问题,可能也是一个简单的答案,但有大量的上下文。 问题 setActualDefaultRingtoneUri() 是否仍然适用于 API 23?因为我无法让它发挥作用 上下文:我已经设
这个问题可能与 this question 重复但我发现代码有些不同,所以我提出了一个新问题。 问题是我无法在 RingtonePicker 中设置选取的铃声。我用 Support Library和
我正在制作 android 应用程序,当我单击 ListView 项时,我希望找到所单击项的 ID,获取资源并将该文件设置为铃声。但是我收到此错误:方法 setActualDefaultRington
我有以下代码 fragment 用于播放保存在 res/raw 文件夹中的音调。我可以看到警报对话,但我想播放的声音没有发生。我在这里犯了什么错误? if(min < thresHold)
我是一名优秀的程序员,十分优秀!