Используя PackageManager, вы можете запрашивать Activity/etc в системе во всех установленных пакетах (APK). Пример кода ApiDemos в Android SDK использует это в классе 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
}
Фрагмент манифеста:
<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. Я не эксперт по службам Android, поэтому любые отзывы других, вероятно, будут полезны.
person
MikeC
schedule
11.02.2012