Androidアプリを一覧表示 - Kivy Advent Calendar 2013
本当はアプリ起動まで持って行きたかったんですけどねー。ちょっと時間的に無茶でした…
現状はAndroidアプリの一覧を表示するだけです。まあソートしてないので、起動できたところで使いづらいったらありゃしませんが…
しかしAndroidのパッケージマネージャからデータを引っ張り出してますが、パーミッション要らないんですね。トロイの木馬には怪しいアプリが丸見えなのか…おお怖い怖い。
まあListViewの使い方の学習も兼ねていますので、その部分だけはAndroid以外の人も参考になるかと。
(/sdcard/kivy/launch/)
android.txt | お約束 |
fonts_ja.py | 使い回し |
main.py | スクリプト本体 |
(main.py)
from kivy.app import App from kivy.uix.listview import ListView, ListItemLabel from kivy.adapters.listadapter import ListAdapter from jnius import autoclass, cast import fonts_ja class PackageManager: PythonActivity = autoclass('org.renpy.android.PythonActivity') Intent = autoclass('android.content.Intent') def __init__(self): self.context = cast('android.content.Context', self.PythonActivity.mActivity) self.pm = self.context.getPackageManager() def query(self): intent = self.Intent() intent.setAction(self.Intent.ACTION_MAIN) intent.addCategory(self.Intent.CATEGORY_LAUNCHER) return self.pm.queryIntentActivities(intent, 0).toArray() def loadLabel(self, ri): return ri.loadLabel(self.pm).toString() class LauncherApp(App): def build(self): pm = PackageManager() data = pm.query() args_converter = lambda _i, _r: {'text': pm.loadLabel(_r), 'size_hint_y': None, 'height': 50} list_adapter = ListAdapter(data=data, args_converter=args_converter, cls=ListItemLabel, selection_mode='single', allow_empty_selection=False) root = ListView(adapter=list_adapter) return root if __name__ == '__main__': LauncherApp().run()