Delphi or C++Builder で Android 上にインストールされているアプリケーションの一覧を取得する
9108 ワード
この記事は以前 EDN の Delphi, C++Builder に投稿した記事のリライトです。
他のアプリと連携するようなアプリを作ろうとしたとき、実際にその端末に何のアプリがインストールされているかを調べなければ話が始まりません。
連携したいアプリがインストールされていないことも考えられますから。
Delphi や C++Builder から Android API の PackageManager と ApplicationInfo を使うと、デバイスにインストールされているアプリケーションの情報を取得することができます。
サンプルコード
フォーム上に TToolBar とその上に TButton を置き、残りの場所は TListBox を Align = Client で設置しています。
ボタンをクリックすると、取得したアプリ名を Listbox の Items として追加して表示します。
(10.2 Tokyo Release 1, Nexus 5, Android 5.1.1 で確認してます)
Delphi
procedure TForm1.Button1Click(Sender: TObject);
// usesに以下を追加します
// Androidapi.JNI.GraphicsContentViewText
// Androidapi.JNI.JavaTypes
// Androidapi.Helpers
// Androidapi.JNIBridge
var
PM: JPackageManager; // PackageManager
PL: JLlist; // 取得したパッケージ情報を格納するためのリスト
AI: JApplicationInfo; // ApplicationInfo
iter: JIterator;
i: Integer;
begin
// PackageManagerを取得する
PM := TAndroidHelper.Activity.getPackageManager;
// JListにパッケージ情報を格納する
PL: PM.getInstalledApplications(TJContext.JavaClass.BIND_AUTO_CREATE);
iter := PL.Iterator;
// 初期化
i := 0;
ListBox1.Items.Clear;
while iter.hasNext do begin
// リストに格納されているパッケージ情報を1件取り出す
AI := TJApplicationInfo.Wrap((PL.get(i) as ILocalObject).GetObjectID);
// ListBoxの itemsに loadLabelで取得したアプリケーション名をセットする
ListBox1.Items.Add(JStringtoString(AI.loadLabel(PM).toString));
// 次の項目へ
i := i+1;
iter.next;
end;
end;
C++Builder
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// include に以下を追加します
// Androidapi.JNI.GraphicsContentViewText.hpp
// Androidapi.JNI.JavaTypes.hpp
// Androidapi.Helpers.hpp
// Androidapi.JNIBridge.hpp
_di_JPackageManager PM; // PackageManager
_di_JList PL; // 取得したパッケージ情報を格納するためのリスト
_di_JApplicationInfo AI; // ApplicationInfo
_di_JIterator iter;
// PackageManagerを取得する
PM = TAndroidHelper::Activity->getPackageManager();
// JListにパッケージ情報を格納する
PL = PM->getInstalledApplications(TJContext::JavaClass->BIND_AUTO_CREATE);
iter = PL->iterator();
// 初期化
int i=0;
ListBox1->Items->Clear();
while (iter->hasNext()) {
// リストに格納されているパッケージ情報を1件取り出す
AI = TJApplicationInfo::Wrap(_di_ILocalObject(PL->get(i))->GetObjectID());
// ListBoxの itemsに loadLabelで取得したアプリケーション名をセットする
ListBox1->Items->Add(JStringToString(AI->loadLabel(PM)->toString()));
//次の項目へ
i++;
iter->next();
}
}
Author And Source
この問題について(Delphi or C++Builder で Android 上にインストールされているアプリケーションの一覧を取得する), 我々は、より多くの情報をここで見つけました https://qiita.com/CYonezawa/items/5f91c926931f5c4a2088著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .