使用 PackageManager,您可以查询系统上所有已安装包(APK)中的活动/等。 Android SDK 中的 ApiDemos 示例代码在 com.example.android.apis.ApiDemos 类中使用了这个。
代码示例:
void findAddOnActivities() {
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory("myPackage.intent.category.ADDON");
PackageManager pm = getPackageManager();
List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0);
// list contains all activities that match your filters in mainIntent
}
清单sn-p:
<activity
android:label="My external Add-on"
android:name=".addons.TestAddon" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="myPackage.intent.category.ADDON" />
</intent-filter>
</activity>
对于数据库访问和管理访问/修改安全性:
在清单中声明您自己的权限:
<permission android:name="com.mycompany.myapp.database.permission.READ"
android:label="@string/read_permission" android:protectionLevel="signatureOrSystem"></permission>
<permission android:name="com.mycompany.myapp.database.permission.WRITE"
android:label="@string/write_permission" android:protectionLevel="signatureOrSystem"></permission>
protectionLevel 标记将确保只有属于映像的一部分或使用与主应用相同的密钥签名的 APK 才能被授予该权限。
有很多方法可以让插件访问您的数据库。远程服务或提供接口将起作用。在我拥有的应用程序中,我的主应用程序有一个名为 DBManager 的类,它已经对数据库进行了一堆读/写操作。所以我只是在我的外部应用程序中使用该类,它可以执行所有读/写操作,因为包使用相同的密钥进行签名。
如果您不想使用相同的密钥对包进行签名,请考虑使用示例代码RemoteService.java 中的远程服务。查看android service dev guide 了解更多详情。我不是 android 服务方面的专家,因此其他人的任何反馈都可能会有所帮助。