【发布时间】:2021-05-22 13:01:41
【问题描述】:
我的 Android 应用中有一个设置活动,可以从 res/raw 文件夹中的文件中选择声音。还有其他设置,但 settings_pref.xml 文件的基本部分是
<PreferenceCategory android:title="Pager Tone">
<ListPreference
android:defaultValue="pager1"
android:entries="@array/pagerName"
android:entryValues="@array/pagerFile"
android:key="pagerSound"
android:title="Select Pager Tone"
app:useSimpleSummaryProvider="true" />
</PreferenceCategory>
那么SettingsFragment.java就是
import android.os.Bundle;
import androidx.preference.PreferenceFragmentCompat;
public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.settings_pref, rootKey);
}
}
简单。它有效。现在我想在用户选择它时播放一个简短的声音样本。这就是我要摆脱困境的地方。我一直在尝试我在互联网上找到的各种建议,但我还没有任何工作。
我发现最好看的选项是将 SettingsFragment.java 更改为此
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager;
public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.settings_pref, rootKey);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
String pagerTone = sharedPreferences.getString("pagerSound", "");
Resources res = this.getResources();
int soundId = res.getIdentifier(pagerTone, "raw", "cgpagerdev");
MediaPlayer player = MediaPlayer.create(getContext(), soundId);
AudioManager mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int Volume = (int) (maxVolume * 0.2);
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, Volume,AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND);
player.start();
}
}
我不知道它是否真的可以工作,因为 Android Studio 给出了以下错误:
无法解析“SettingsFragment”中的方法“getSystemService”
遵循 Android Studio 的任何建议似乎都会产生其他错误消息。另一个地方的类似代码可以正常工作,所以我看不出这里出了什么问题。我知道我必须添加一些东西才能让声音再次停止(也许是一个计时器将其限制为 1 或 2 秒),但我只想让它首先工作。
【问题讨论】:
标签: android sharedpreferences android-mediaplayer android-preferences