Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to release application plugin using Android Market?

Tags:

Could someone describe me a solution to implement a plugin inside an Android application and how could it be sold on the Android Market?

Typically, you create a game whose 4 first levels are free. Then, the user should buy something using the Android Market to unlock additional levels.

A solution could be to list the packages set up on the phone which are named com.company.myApp.additionalLevelSet1 but it doesn't seem secure at all! (a user could manually set up the plugin packages and so unlock additional features freely)

On iPhone, you could use InAppPurchase to buy non-consumable or consumable products.

Any help or suggestion would be appreciated. Thanks!

like image 503
Sly Avatar asked Jan 26 '11 10:01

Sly


People also ask

What is operator Plugin Android?

The operator plugin framework enables adding custom signal and image processing operators as plugins.


1 Answers

It's quite simple in your case, since you don't need any extra logic, but just more levels, so I will stick to this specific case:

You can (or probably already do) have your game levels saved as resources in your .apk, so a plug in can be a standard .apk, that will not appear in the list of users-apps. To prevent it from appearing, simply don't declare the category-launcher:

<intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Once the snippet above does NOT appear in your plugin's AndroidManifest, it will not be directly accessible to the user.

When your main game activity starts, it should check for the existence of plugins, you can do it, by calling PackageManager.queryIntentActivities. And querying for a specific intent you declared in the AndroidManifest file of your plugin, for example:

<intent-filter>
  <action android:name="com.your.package.name.LEVEL_PACK" />
</intent-filter>

The query code would then be:

PackageManager packageManager = getPackageManager();
Intent levelsIntent = new Intent("com.your.package.name.LEVEL_PACK");
List<ResolveInfo> levelPacks = packageManager.queryIntentActivities(levelsIntent, 0);

There are more ways to do this, but this is quite trivial and straight forward.

The last step is to access the levels from the installed level-packs. You can do this by calling: PackageManager.getResourcesForActivity and load the relevant resources and use them as you will.

like image 172
Lior Avatar answered Oct 21 '22 17:10

Lior