android uri.fromfile /data/data,Android通过setDataAndType(uri, "type")打开文件

今天做项目遇到了下载更新APP后自动安装的功能,也就是说当下载之后打开该Apk文件。我们可以通过intent的setDataAndType方法实现,这里列举出更多的打开方式:

我的具体代码实现片段是:

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setDataAndType(Uri.fromFile(new File(filePath)),"application/vnd.android.package-archive");

startActivity(intent);

filePath是该文件的绝对路径。

1.打开所有文件类型

Intent intent = new Intent();

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setAction(android.content.Intent.ACTION_VIEW);

intent.setDataAndType(uri,"*/*");2.打开apk文件

Intent intent = new Intent();

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setAction(android.content.Intent.ACTION_VIEW);

intent.setDataAndType(uri,"application/vnd.android.package-archive");3.打开Video文件

Intent intent = new Intent("android.intent.action.VIEW");

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

intent.setDataAndType(uri, "video/*");4.打开audio文件

Intent intent = new Intent("android.intent.action.VIEW");

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

intent.setDataAndType(uri, "audio/*");

5.打开HTML文件

Uri uri2 = Uri.parse(uri).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(param ).build();

Intent intent = new Intent("android.intent.action.VIEW");

intent.setDataAndType(uri2, "text/html");6.打开Image文件

Intent intent = new Intent("android.intent.action.VIEW");

intent.addCategory("android.intent.category.DEFAULT");

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setDataAndType(uri, "image/*");7.打开PPT文件

Intent intent = new Intent("android.intent.action.VIEW");

intent.addCategory("android.intent.category.DEFAULT");

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setDataAndType(uri, "application/vnd.ms-powerpoint");8.打开Excel文件

Intent intent = new Intent("android.intent.action.VIEW");

intent.addCategory("android.intent.category.DEFAULT");

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setDataAndType(uri, "application/vnd.ms-excel");9.打开word文件

Intent intent = new Intent("android.intent.action.VIEW");

intent.addCategory("android.intent.category.DEFAULT");

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setDataAndType(uri, "application/msword");10.打开CHM文件

Intent intent = new Intent("android.intent.action.VIEW");

intent.addCategory("android.intent.category.DEFAULT");

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setDataAndType(uri, "application/x-chm");11.打开文本文件

Intent intent = new Intent("android.intent.action.VIEW");

intent.addCategory("android.intent.category.DEFAULT");

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setDataAndType(uri1, "text/plain");12.打开PDF文件

Intent intent = new Intent("android.intent.action.VIEW");

intent.addCategory("android.intent.category.DEFAULT");

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setDataAndType(uri, "application/pdf");

有关Intent的知识请移步博客:

http://www.voidcn.com/article/p-nmvgmjlf-rg.html

在Unity打包安卓应用后,尝试访问`storage/emulated/0/Android/data/{包名}/files`目录下的文件通常会受限,因为这是应用程序私有存储区域,而非公开读写的存储空间。特别是当你试图打开`.apk`文件时,由于Android系统的安全策略,你不能像操作普通的文件那样直接打开它。 如果你想在运行时动态安装或更新APK,你应该考虑使用`ACTION_VIEW`系统 Intent 和 `PackageManager` API。例如: ```csharp string apkFilePath = "SE.apk"; string packageName = "com.example.app"; // 替换为你的实际包名 using (var fileStream = File.OpenRead(apkFilePath)) { Intent intent = new Intent(Intent.ActionView); intent.SetDataAndType(Android.Net.Uri.FromFile(fileStream), "application/vnd.android.package-archive"); intent.SetFlags(ActivityFlags.NewTask); // 创建新任务避免覆盖当前活动 intent.SetPackage(packageName); if (ActivityCompat.CheckSelfPermission(Application.Context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != Permission.Granted) { ActivityCompat.RequestPermissions(Application.Context, new String[] { Manifest.Permission.WRITE_EXTERNAL_STORAGE }, permissionsRequestCode); return; } try { Application.Context.StartActivity(intent); } catch (ActivityNotFoundException e) { Debug.LogError("No activity found to handle the installation request."); } } ``` 在这个例子中,你需要先请求`WRITE_EXTERNAL_STORAGE`权限。如果没有找到合适的Activity来处理安装请求(比如,用户可能已经卸载了对应的应用),则会捕获异常。 另外,请注意,直接在用户设备上动态安装APK通常不是最佳实践,因为它可能导致隐私和安全风险。只在必要的情况下并且获得用户的明确许可时才进行此类操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值