我有一个应用程序,我将免费发布,但我想在应用程序购买中包含解锁高级设置。我已经完成了一些关于这个主题的教程搜索,但只找到有关购买设置的信息,而且没有任何以编程方式进行的操作。我不是要将这个问题作为一个关于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>
编辑:我仍然坚持这个问题,并希望得到有关如何实现这一点的任何反馈。
答案 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
。