Android实例-调用系统APP

相关资料:群号383675978

实例源码:

  1 unit Unit1;
  2
  3 interface
  4
  5 uses
  6   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  7   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  8   FMX.Controls.Presentation, FMX.Edit,
  9   Androidapi.JNI.JavaTypes,//JString使用
 10   Androidapi.JNI.GraphicsContentViewText,//JIntent使用
 11   FMX.Surfaces,//TBitmapSurface使用
 12   Androidapi.Helpers,//SharedActivity使用
 13   System.IOUtils,//TPath使用
 14   Androidapi.JNIBridge,//ILocalObject使用
 15   FMX.Helpers.Android,//JBitmapToSurface使用
 16   System.Generics.Collections,//TList使用
 17   FMX.ListView.Types, FMX.ListView.Appearances,
 18   FMX.ListView.Adapters.Base, FMX.ListView, FMX.StdCtrls, FMX.ScrollBox,
 19   FMX.Memo;
 20
 21 type
 22   TForm1 = class(TForm)
 23     Edit1: TEdit;
 24     ListView1: TListView;
 25     Button1: TButton;
 26     Memo1: TMemo;
 27     procedure Edit1Change(Sender: TObject);
 28     procedure Edit1Typing(Sender: TObject);
 29     procedure Button1Click(Sender: TObject);
 30     procedure FormCreate(Sender: TObject);
 31     procedure ListView1ItemClick(const Sender: TObject;
 32       const AItem: TListViewItem);
 33   private
 34     { Private declarations }
 35     MainList : TList<JActivityInfo>;
 36     dictAppIcons : TDictionary<Integer, TBitmap>;
 37     //过虑方法
 38     procedure FilterListView(AListView: TListView; AFilterName: string);
 39     //打开APP方法
 40     procedure OpenApp(PackageName, AppName : JString);
 41     //获取安装的APP
 42     function GetActivityAppList: JList;
 43     function GetOrSetCashAppIcon(appInfo: JApplicationInfo): TBitmap;
 44     procedure LoadActivityInfoList(var List: TList<JActivityInfo>);
 45     procedure LoadDictonaryAppIcons(index: Integer; appInfo: JApplicationInfo;
 46       var dictonaryAppIcons: TDictionary<Integer, TBitmap>);
 47     procedure LoadListView(listView: TListView; AppList: TList<JActivityInfo>;
 48       dictonaryAppIcons: TDictionary<Integer, TBitmap>);
 49     procedure LoadListViewBitmap(listView: TListView; AppList: TList<JActivityInfo>;
 50       var dictonaryAppIcons: TDictionary<Integer, TBitmap>);
 51   public
 52     { Public declarations }
 53   end;
 54
 55 const
 56     DEFAUT_INDEX: Integer = -1;
 57
 58 var
 59   Form1: TForm1;
 60
 61 implementation
 62
 63 {$R *.fmx}
 64 {$R *.NmXhdpiPh.fmx ANDROID}
 65
 66 { TForm1 }
 67 //调用打开APP
 68 procedure TForm1.Button1Click(Sender: TObject);
 69 begin
 70   OpenApp(StringToJString(‘com.androidillusion.videocamillusionpro‘),
 71     StringToJString(‘com.androidillusion.videocamillusionpro.VideoillusionActivity‘));
 72 end;
 73
 74 //改变事件
 75 procedure TForm1.Edit1Change(Sender: TObject);
 76 begin
 77   if Edit1.Text = ‘‘ then
 78    FilterListView(Self.ListView1, Edit1.Text.Trim);
 79 end;
 80
 81 //输入事件
 82 procedure TForm1.Edit1Typing(Sender: TObject);
 83 begin
 84   FilterListView(Self.ListView1, Edit1.Text.Trim);
 85 end;
 86
 87 //过虑方法
 88 procedure TForm1.FilterListView(AListView: TListView; AFilterName: string);
 89 var
 90   i: integer;
 91   item: TListViewItem;
 92   lower: string;
 93 begin
 94   if not Assigned(AListView) then
 95     Exit;
 96   lower := AFilterName.ToLower.Trim;
 97   if lower.IsEmpty then
 98   begin
 99     if Assigned(AListView.Items.Filter) then
100       AListView.Items.Filter := nil;
101   end
102   else
103   begin
104     AListView.ItemIndex := DEFAUT_INDEX;
105     AListView.Items.Filter :=
106     function(sFilter: string): Boolean
107     begin
108       Result := (lower.IsEmpty) or sFilter.ToLower.Contains(lower);
109     end;
110   end;
111 end;
112
113 procedure TForm1.FormCreate(Sender: TObject);
114 begin
115   LoadActivityInfoList(MainList);
116   LoadListView(Self.ListView1, MainList, self.dictAppIcons);
117   LoadListViewBitmap(Self.ListView1, MainList, self.dictAppIcons);
118 end;
119
120 //获取安装的APP
121 function TForm1.GetActivityAppList: JList;
122 var
123   tempList: JList;
124   Intent: JIntent;
125   Manager: JPackageManager;
126 begin
127   Intent := TJIntent.Create;
128   Intent.SetAction(TJIntent.JavaClass.ACTION_MAIN);
129   Intent.AddCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER);
130   Manager := SharedActivity.GetPackageManager;
131   tempList := nil;
132   tempList := Manager.QueryIntentActivities(Intent, 0);
133   Result := tempList;
134 end;
135
136 function TForm1.GetOrSetCashAppIcon(appInfo: JApplicationInfo): TBitmap;
137 var
138   Drawable: JDrawable;
139   Bitmap: JBitmap;
140   itemBitmap: TBitmap;
141   Surface: TBitmapSurface;
142   saveDir: string;
143   pngFileName: string;
144   SaveParams: TBitmapCodecSaveParams;
145 begin
146   if not Assigned(appInfo) then
147   begin
148     Result := itemBitmap;
149     Exit;
150   end;
151
152   saveDir := TPath.GetCachePath;
153   pngFileName := saveDir + ‘/‘ + JStringToString(appInfo.packageName) + ‘.png‘;
154   itemBitmap := TBitmap.Create;
155   if not TDirectory.Exists(saveDir, False) then
156     TDirectory.CreateDirectory(saveDir);
157   if TFile.Exists(pngFileName) then
158     itemBitmap.LoadFromFile(pngFileName)
159   else
160   begin
161     Drawable := appInfo.loadIcon(SharedActivity.getPackageManager);
162     Bitmap := TJBitmapDrawable.Wrap((Drawable as ILocalObject).GetObjectID).getBitmap;
163     Surface := TBitmapSurface.Create;
164     try
165       if JBitmapToSurface(Bitmap, Surface) then
166       begin
167         itemBitmap.Assign(Surface);
168         SaveParams.Quality := 100;
169         itemBitmap.SaveToFile(pngFileName, @SaveParams);
170       end;
171     finally
172       Surface.Free;
173     end;
174   end;
175   Result := itemBitmap;
176 end;
177
178 procedure TForm1.ListView1ItemClick(const Sender: TObject;
179   const AItem: TListViewItem);
180 begin
181   if not Assigned(MainList) then
182     Exit;
183   OpenApp(MainList.Items[AItem.Tag].applicationInfo.packageName,
184     MainList.Items[AItem.Tag].name);
185   Memo1.Lines.Add(JStringToString(MainList.Items[AItem.Tag].applicationInfo.packageName) + ‘/\‘ + JStringToString(MainList.Items[AItem.Tag].name));
186 end;
187
188 procedure TForm1.LoadActivityInfoList(var List: TList<JActivityInfo>);
189 var
190   tempList: JList;
191   i: Integer;
192   ResolveInfo: JResolveInfo;
193   Info: JActivityInfo;
194   AppInfo: JApplicationInfo;
195 begin
196   if not Assigned(List) then
197     List := TList<JActivityInfo>.Create;
198   List.Clear;
199   tempList := Self.GetActivityAppList;
200   for i := 0 to tempList.size - 1 do
201   begin
202     ResolveInfo := TJResolveInfo.Wrap((tempList.get(i) as ILocalObject).GetObjectID);
203     Info := TJActivityInfo.Wrap((ResolveInfo.activityInfo as ILocalObject).GetObjectID);
204     AppInfo := TJApplicationInfo.Wrap((Info.applicationInfo as ILocalObject).GetObjectID);
205     List.Add(Info);
206   end;
207 end;
208
209 procedure TForm1.LoadDictonaryAppIcons(index: Integer;
210   appInfo: JApplicationInfo;
211   var dictonaryAppIcons: TDictionary<Integer, TBitmap>);
212 var
213   itemBitmap : TBitmap;
214 begin
215   if not Assigned(dictonaryAppIcons) then
216     dictonaryAppIcons := TDictionary<Integer, TBitmap>.Create;
217   if not dictonaryAppIcons.ContainsKey(index) then
218   begin
219     itemBitmap := GetOrSetCashAppIcon(appInfo);
220     dictonaryAppIcons.AddOrSetValue(index, itemBitmap);
221   end;
222 end;
223
224 procedure TForm1.LoadListView(listView: TListView;
225   AppList: TList<JActivityInfo>;
226   dictonaryAppIcons: TDictionary<Integer, TBitmap>);
227 var
228   tempItem : TListViewItem;
229   tempString, tempSubString, tempSubString2 : string;
230   i : integer;
231 begin
232   if (not Assigned(listView)) or (not Assigned(AppList)) then
233     Exit;
234   listView.Items.Clear;
235   listView.BeginUpdate;
236   for I := 0 to AppList.Count - 1 do
237   begin
238     tempString := JStringToString(AppList.Items[i].applicationInfo.loadLabel(SharedActivity.getPackageManager).toString);
239     tempItem := listView.Items.Add;
240     tempItem.Text := tempString;
241     tempItem.Tag := i;
242   end;
243   listView.EndUpdate;
244 end;
245
246 procedure TForm1.LoadListViewBitmap(listView: TListView;
247   AppList: TList<JActivityInfo>;
248   var dictonaryAppIcons: TDictionary<Integer, TBitmap>);
249 var
250   i: integer;
251 begin
252   if (not Assigned(listView)) or (not Assigned(AppList)) then
253     Exit;
254   listView.BeginUpdate;
255   for I := 0 to listView.ItemCount - 1 do
256   begin
257     listView.Items[i].BeginUpdate;
258     LoadDictonaryAppIcons(i, AppList.Items[listView.Items[i].Tag].applicationInfo, dictonaryAppIcons);
259     if Assigned(dictonaryAppIcons) and (dictonaryAppIcons.ContainsKey(i)) then
260         listView.Items[i].Bitmap := dictonaryAppIcons.Items[i];
261     listView.Items[i].EndUpdate;
262     Application.ProcessMessages;
263   end;
264   listView.EndUpdate;
265 end;
266
267 //打开APP方法
268 procedure TForm1.OpenApp(PackageName, AppName: JString);
269 var
270   Intent : JIntent;
271   NativeComponent : JComponentName;
272 begin
273   Intent := TJIntent.Create;
274   Intent.setAction(TJIntent.JavaClass.ACTION_MAIN);
275   Intent.addCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER);
276   NativeComponent := TJComponentName.JavaClass.init(PackageName, AppName);
277   Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK or TJIntent.JavaClass.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
278   Intent.setComponent(NativeComponent);
279   SharedActivity.startActivity(Intent);
280 end;
281
282 end.
时间: 2024-11-07 23:08:11

Android实例-调用系统APP的相关文章

android中调用系统的发送短信、发送邮件、打电话功能

1 调用发送短信功能: Uri smsToUri = Uri.parse("smsto:"); Intent sendIntent = new Intent(Intent.ACTION_VIEW, smsToUri); sendIntent.putExtra("address", "123456"); //电话号码,这行去掉的话,默认就没有电话 sendIntent.putExtra("sms_body","短信内容

Android中调用系统所装的软件打开文件(转)

Android中调用系统所装的软件打开文件(转) 在应用中如何调用系统所装的软件打开一个文件,这是我们经常碰到的问题,下面是我所用到的一种方法,和大家一起分享一下! 这个是打开文件的一个方法: Java代码 /** * 打开文件 * @param file */ private void openFile(File file){ Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //设置in

Android拍照调用系统相册仿微信封装总结,治疗各种崩溃,图片横竖问题压缩等问题。

项目下载地址:https://github.com/Aiushtha/android-PictureSelector 最早使用android调用系统拍照然后遇到很多空指针等问题 以及各种android 不同版本Intent取data有时候会空指针之类的api兼容问题 像使用红米note在开了很多应用后,再启动拍照系统,会发生拍照崩溃图片丢失等问题 用微信控件有时拍照有极小概率拍照无效等等奇怪的问题 其原因是因为Activity被回收了,变量变成null, 参考下面一篇博客 http://blog

Android 如何调用系统默认浏览器访问

// 调用系统默认浏览器 // 参考: // http://www.cnblogs.com/zhwl/archive/2011/11/15/2249848.html // https://segmentfault.com/a/1190000003912694 case R.id.tv_about_weibo: // 关于微博 // 直接打开 // Intent intent= new Intent(); // intent.setAction("android.intent.action.VIE

[Android Pro] 调用系统相机和图库,裁剪图片

private static final int PHOTO_REQUEST_TAKEPHOTO = 1;// 拍照 private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择 private static final int PHOTO_REQUEST_CUT = 3;// 结果 private File tempFile = new File(Environment.getExternalStorageDirectory(), g

Android:调用系统图库/裁剪图片

开发中,调用系统图库和裁剪照片是很常见的需求.相对于自己实现这种功能,直接调用系统具有诸多优点,如不用考虑屏幕适配,不用担心性能问题,等等.因此,对于一般的需求,建议直接调用系统的功能,简便高效! 首先上效果图:            一.只调用系统图库(不裁剪),返回用户选择的图片.(只支持单选,如需多选则需要自己实现,参考另一篇博文:Android:仿QQ照片选择器(按相册分类显示,多选添加)) 1.跳转至系统图库页面: Intent i = new Intent(Intent.ACTION

Android中调用系统已安装的播放器来播放网络流媒体视频

实现思路比较简单几行代码就可以搞定,在界面放一个Button或者带有播放图标的imageview,点击事件中调用本地播放器来播放. Uri uri = Uri.parse("http://218.200.69.66:8302/upload/Media/20150327/43bfda1b-7280-469c-a83b-82fa311c79d7.m4v"); // 调用系统自带的播放器来播放流媒体视频 Intent intent = new Intent(Intent.ACTION_VIE

Android:调用系统分享功能

示意代码: /** * 调用系统的分享功能 * Created by admin on 15-4-13. */ public class ShareActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.share_layout); } //分享文字 p

Android 通过调用系统,如接口 谷歌语音、百度语音、科大讯飞语音等语音识别方法对话框

现在app在发展过程中会集成一些语音识别功能,不具有其自己的显影剂一般正在开发的语音识别引擎,所以在大多数情况下,它是选择一个成熟的语音识别引擎SDK集成到他们的app在. 平时,这种整合被分成两个,一种是直接调用SDK开发商设计了弹出框.互界面:另一种是开发人员仅仅利用SDK提供的语音识别服务,自己开发一个属于自己的交互设计. 本文介绍最简单直接调起弹出框的方法. 首先.測试机须要安装如谷歌语音.百度语音.讯飞语音等产品的语音软件,这时能够在系统设置界面的语言与输入处找到相关的语音识别功能列表