我计划使用android库项目方法发布我的免费Android应用程序的付费版本。 http://developer.android.com/tools/projects/index.html
我的应用程序有几个独立(非用户界面)类和资源,可以在付费版和免费版之间轻松重复使用。
我的问题是关于管理用户界面逻辑的最佳方法(Activity类中的代码)。让我们说我的免费应用程序有一个按钮,我的付费应用程序在同一个活动中有两个按钮。实现这一目标的最佳方法是进行以下设置吗?
1)一键式布局
2)Ativity.java文件,包含单击按钮时的逻辑
使用库项目的布局和源代码
1)带有两个按钮的新布局文件 2) new Activity.java,它具有完全相同的代码,用于处理button1点击和处理button2点击的新代码。
这似乎不对,因为按钮1在付费应用中的逻辑似乎是一个浪费的副本......有更好的方法吗?
答案 0 :(得分:1)
您可以创建具有所有功能的单个项目库
只需要一种方法,可以识别应用程序是付费还是免费
为此,请按照步骤
1)创建一个新的应用程序假设testFree
2)在库项目中创建一个新的应用程序类
package com.example.testlib;
import android.app.Application;
public class App extends Application{
private static App mInstance;
public App() {
mInstance = this;
}
public static App getInstance() {
return mInstance;
}
public boolean isFree()
{
return true;
}
}
3)创建一个新的应用程序假设testPaid
4)在testPaid应用程序中创建一个新的Application类,如下面的
package com.example.testpaid;
import com.example.testlib.App;
public class AppPaid extends App {
@Override
public boolean isFree() {
// TODO Auto-generated method stub
return false;
}
}
5)将testFree应用程序上的应用程序名称设置为我们在库类上创建的Application类,并从库类中设置main和launcher活动
<application
android:name="com.example.testlib.App"
....
<activity
android:name="com.example.testlib.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
6)现在设置应用程序名称以创建testPaid app的应用程序类以及库项目中的main和launcher活动,如下所示
<application
android:name="com.example.testpaid.AppPaid"
....
<activity
android:name="com.example.testlib.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
7)您现在已经在任何类别的图书馆项目中设置了一个方法,可以检查您的应用是免费还是付费,您可以按照以下方式进行检查,并根据您可以向付费应用查看一些付费功能还有一些免费的
if(App.getInstance().isFree())
{
Toast.makeText(getActivity(), "Free App", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getActivity(), "Paid App", Toast.LENGTH_SHORT).show();
}
如果您仍然发现任何问题,请告诉我.....