【问题标题】:can I make ringtone in preferences我可以在偏好中制作铃声吗
【发布时间】:2012-03-10 21:57:12
【问题描述】:

如何制作铃声活动(总是出现在设置中),以便用户可以从系统铃声中选择她的铃声我用谷歌搜索但我没有找到完整的教程,我真的很困惑,请给我教程或一些代码.

另外,如果我希望用户在我的应用程序中为通知选择特殊铃声,我应该使用共享偏好还是偏好?

我已经做了菜单:

      // Menu Code Part#2
    public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.about:
  startActivity(new Intent(this, About.class));
    return true;
    case R.id.help:
  startActivity(new Intent(this, Help.class));
    return true;
    case R.id.setting:
   startActivity(new Intent(this, Setting.class));
        return true;
    default:
    return super.onOptionsItemSelected(item);
   }

【问题讨论】:

    标签: java android preference ringtone


    【解决方案1】:

    完整代码:

    res/xml/preferences.xml

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
          <PreferenceCategory
                    android:title="Second Category">
    
            <RingtonePreference
                    android:name="Ringtone Preference"
                    android:summary="Select a ringtone"
                    android:title="Ringtones"
                    android:key="ringtonePref" />
    
    </PreferenceCategory>
    </PreferenceScreen>
    

    Preferences.class

    public class Preferences extends PreferenceActivity {
    @Override
            protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    addPreferencesFromResource(R.xml.preferences); 
    
     }
    }
    

    您的代码放在这里:

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.about:
       // startActivity(new Intent(this, About.class));
        return true;
        case R.id.help:
        startActivity(new Intent(this, Help.class));
        return true;
        case R.id.setting:
        Intent settingsActivity = new Intent(getBaseContext(),
                                                    Preferences.class);
                                    startActivity(settingsActivity);
    
    
            return true;
        default:
        return super.onOptionsItemSelected(item);
        } 
    

    要从代码中读取这些首选项,我们应该创建一个getPrefs() 方法,我们可以在onStart() 方法中调用它。当我们在onStart() 方法而不是onCreate() 中调用它时,我们可以确定在我们设置它们并返回到我们的主要活动时加载首选项, getPrefs() 方法可能如下所示:

    String ringtonePreference;
    // Get the xml/preferences.xml preferences
                    SharedPreferences prefs = PreferenceManager
                                    .getDefaultSharedPreferences(getBaseContext());
     ringtonePreference = prefs.getString("ringtonePref",
                                    "DEFAULT_RINGTONE_URI");
    

    androidmanifest.xml

    <activity
            android:name=".Preferences"
            android:label="@string/set_preferences">
    </activity>
    

    【讨论】:

    • mainfist 中的第一个代码?第二个代码我应该把它放在 newActivity 中,我应该在菜单中调用 newActivity 吗?对?还有第二个代码,是完整的reingtone代码吗?还是我需要另一个代码?
    • @user1257040:preferneces.xml 文件中的第一个代码和您要访问所选铃声的第二个代码。
    • 是完整的代码吗?我的意思是不需要其他代码?
    • 嗨朋友,您的问题是否解决了,因为这段代码在我这边完美运行..
    • ok 然后使用 CheckBoxPreference 并在preferencs.xmle 文件中添加此代码
    【解决方案2】:

    是的,您可以使用SharedPreferences 来存储用户选择的铃声的URI。您可以让用户使用以下方法选择铃声:

    Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Ringtone");
    if (mRingtoneUri != null) { 
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(mRingtoneUri));
    } else {
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri) null);
    }
    startActivityForResult(intent, RINGTONE_REQUEST);
    

    以上代码将提示用户从系统中选择铃声。当他们选择一个时,您将需要处理 Activity 结果:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == RINGTONE_REQUEST && resultCode == RESULT_OK) {
            Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
            SharedPreferences preferences = getSharedPreferences(PREF, MODE_PRIVATE);
            Editor editor = preferences.edit();
            if (uri == null)
                editor.putString(RINGTONE, null);
            else
                editor.putString(RINGTONE, uri.toString());
            editor.commit();
            if (uri == null)
                mRingtoneUri = null;
            else
                mRingtoneUri = uri.toString();
            }
        }
    }
    

    此代码会将铃声的 URI 保存到 SharedPreferences

    【讨论】:

    • 您的代码会让用户从系统中选择铃声,对吗?
    • 是的。自己试试看。
    • Activity 中您希望用户选择铃声。
    • 谢谢,但你能告诉我我应该把每个代码放在哪里吗?在活动?还是在偏好活动中?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    相关资源
    最近更新 更多