如何使用应用内购买解锁设置

时间:2013-12-12 03:51:24

标签: android in-app-purchase settings

我有一个应用程序,我将免费发布,但我想在应用程序购买中包含解锁高级设置。我已经完成了一些关于这个主题的教程搜索,但只找到有关购买设置的信息,而且没有任何以编程方式进行的操作。我不是要将这个问题作为一个关于IAP如何工作的广泛问题,而是如何将其应用于设置。可能有些代码会有所帮助。它的内容位于最后一段代码片段preferences.xml中。我已经包含了所有内容,因此您可以看到我如何设置首选项。

MainActivity.java

等待案件“R.id.preferences”。

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.settings_menu, menu);

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    switch(item.getItemId())
    {
        case R.id.about:
            Intent about = new Intent("com.app.ABOUT");
            startActivity(about);
            break;
        case R.id.preferences:
            Intent preferences = new Intent("com.app.PREFERENCES");
            startActivity(preferences);
            break;
        case R.id.exit:
            monitor.pauseSensor(listener);
            finish();
            break;
    }
}

settings_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item 
    android:title="@string/action_settings"
    android:id="@+id/preferences"/>

<item 
    android:title="About"
    android:id="@+id/about"/>

<item 
    android:title="Exit"
    android:id="@+id/exit"/>
</menu>

preferences.java

public class Preferences extends PreferenceActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);

    getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferencesFragment()).commit();
    }

    public static class PreferencesFragment extends PreferenceFragment
    {
        @Override
        public void onCreate(final Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
        }
    }
}

的preferences.xml

这是我想要应用付费选项的地方。在此示例中,有三个付费设置。我原本以为我可以只有两个不同的preferences.xml文件,并根据是否购买付费设置使用其中一个或另一个。但是,这将很难,因为我希望单独或以任何组合方式购买设置。我有很多不仅仅是三个付费设置和创建不同的xml文件组合似乎不理想或可扩展。有没有更好的方法来解决这个问题?

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="Basic Settings">   
    <com.app.custPref
        android:title="Free Pref 1"
        android:key="freePref1"
        android:defaultValue="15"/>
</PreferenceCategory>
<PreferenceCategory android:title="Advanced Settings">
    <com.app.custPref
        android:title="Free Pref 2"
        android:key="freePref2"
        android:defaultValue="5"/>
    <PreferenceScreen
        android:title="Paid Settings"
        android:key="paidSetting"
        android:persistent="false">
        <PreferenceCategory android:title="Paid Settings Category 1">
            <EditTextPreference
                android:title="Paid Settings 1"
                android:key="paidSetting1"
                android:summary="This setting is only available if you have purchased it">
            </EditTextPreference>
        </PreferenceCategory>
        <PreferenceCategory android:title="Paid Settings Category 2">
            <CheckBoxPreference 
                android:title="Paid Settings 2"
                android:summary="This is the second paid setting that can be purchased."
                android:key="paidSetting2"
                android:defaultValue="false"/>
            <EditTextPreference
                android:title="Paid Settings 3"
                android:key="paidSetting3"
                android:summary="This is the third paid setting that can be purchased"
                android:inputType="phone"
                android:dependency="paidSetting2">
            </EditTextPreference>
        </PreferenceCategory>
    </PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>

编辑:我仍然坚持这个问题,并希望得到有关如何实现这一点的任何反馈。

1 个答案:

答案 0 :(得分:0)

我没有对此进行彻底测试,但是在您onCreate的{​​{1}}方法中,您可以检索您感兴趣的偏好组,然后在用户未支付相应费用的情况下删除个人偏好设置特征

这样的事情:

PreferenceFragment

代码:

<PreferenceScreen
    android:title="Paid Settings"
    android:key="paidSettings">
    <PreferenceCategory
        android:title="Paid Settings Category 1"
        android:key="paidCategory1">
        <EditTextPreference
            android:title="Paid Settings 1"
            android:key="paidSetting1"
            android:summary="This setting is only available if you have purchased it">
        </EditTextPreference>
    </PreferenceCategory>
    ...

您只能移除PreferenceGroup group = (PreferenceGroup) findPreference("paidSettings"); if (!paidForCategory1) group.removePreference(findPreference("paidCategory1")); 的直接子女。因此,您必须像我在上面的示例中所做的那样为PreferenceGroup分配key