如果您想了解Xamarin-从媒体插件拍摄的媒体中清除ios/Android上的图片/视频缓存的相关知识,那么本文是一篇不可错过的文章,我们将对xamarin文件操作进行全面详尽的解释,并且为您提供关
如果您想了解Xamarin - 从媒体插件拍摄的媒体中清除 ios/Android 上的图片/视频缓存的相关知识,那么本文是一篇不可错过的文章,我们将对xamarin文件操作进行全面详尽的解释,并且为您提供关于(Android) Xamarin Forms shell 应用程序在最新的 Xamarin 更新后崩溃、android – Xamarin.Auth得到disallowed_useragent错误[Xamarin.Forms]、android – Xamarin.IOS错误 – 无法解析参考:C:/ Program Files(x86)/../ Xamarin.iOS / v1.0 / Facades / System.Private.CoreLib.InteropServices.dll、HarmonyOS 三方件开发指南 (16)-VideoCache 视频缓存的有价值的信息。
本文目录一览:- Xamarin - 从媒体插件拍摄的媒体中清除 ios/Android 上的图片/视频缓存(xamarin文件操作)
- (Android) Xamarin Forms shell 应用程序在最新的 Xamarin 更新后崩溃
- android – Xamarin.Auth得到disallowed_useragent错误[Xamarin.Forms]
- android – Xamarin.IOS错误 – 无法解析参考:C:/ Program Files(x86)/../ Xamarin.iOS / v1.0 / Facades / System.Private.CoreLib.InteropServices.dll
- HarmonyOS 三方件开发指南 (16)-VideoCache 视频缓存
Xamarin - 从媒体插件拍摄的媒体中清除 ios/Android 上的图片/视频缓存(xamarin文件操作)
如何解决Xamarin - 从媒体插件拍摄的媒体中清除 ios/Android 上的图片/视频缓存
我为 ios 和 Android 编写了一个应用程序。它允许用户使用 Media.Plugin 库拍摄照片和视频:https://github.com/jamesmontemagno/MediaPlugin 照片保存在这里: /storage/emulated/0/Android/data/com.idjoey.hempliance/files/Pictures/MyAppname/637542092736259960.jpg
我的问题是这些图片是否会一直保留到应用程序更新或用户进入设置并清除缓存之前? ios / Android 是否会在任何其他时间清除它?
如果我想在 ios/Android 上清除此缓存,最好的方法是什么?
谢谢。
(Android) Xamarin Forms shell 应用程序在最新的 Xamarin 更新后崩溃
如何解决(Android) Xamarin Forms shell 应用程序在最新的 Xamarin 更新后崩溃
所以我有一个 Xamarin Forms Shell 应用程序,Shellcontents 设置如下:
<Shell etc etc>
<ShellContent ContentTemplate="Temp1" Route="routeA" Title="titleA" />
<ShellContent ContentTemplate="Temp2" Route="routeB" Title="titleB" />
<MenuItem Text="{x:Static rx:AppResources.logout}" Command="{Binding logoutCommand}"/>
</Shell>
启动时,ShellContent A 显示一切正常。但是当我触摸 titleB 时,我收到了这个愚蠢的错误。 我一直无法弄清楚,这个错误来自哪里。有什么想法应该去哪里看?
No package ID ff found for ID 0xffffffff.
[AndroidRuntime] Shutting down VM
[AndroidRuntime] FATAL EXCEPTION: main
[AndroidRuntime] android.content.res.Resources$NotFoundException: Unable to find resource ID #0xffffffff
[AndroidRuntime] at android.content.res.ResourcesImpl.getResourceTypeName(ResourcesImpl.java:334)
[AndroidRuntime] at android.content.res.Resources.getResourceTypeName(Resources.java:2300)
[AndroidRuntime] at androidx.fragment.app.FragmentAnim.loadAnimation(FragmentAnim.java:79)
[AndroidRuntime] at androidx.fragment.app.DefaultSpecialEffectsController$AnimationInfo.getAnimation(DefaultSpecialEffectsController.java:774)
[AndroidRuntime] at androidx.fragment.app.DefaultSpecialEffectsController.startAnimations(DefaultSpecialEffectsController.java:144)
[AndroidRuntime] at androidx.fragment.app.DefaultSpecialEffectsController.executeOperations(DefaultSpecialEffectsController.java:120)
[AndroidRuntime] at androidx.fragment.app.SpecialEffectsController.executePendingOperations(SpecialEffectsController.java:294)
[AndroidRuntime] at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2190)
[AndroidRuntime] at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2088)
[AndroidRuntime] at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1990)
[AndroidRuntime] at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
[AndroidRuntime] at android.os.Handler.handleCallback(Handler.java:938)
[AndroidRuntime] at androidx.fragment.app.DefaultSpecialEffectsController.startAnimations(DefaultSpecialEffectsControlleer.dispatchMessage(Handler.java:99)
[AndroidRuntime] at android.os.Looper.loop(Looper.java:246)
[AndroidRuntime] at android.app.ActivityThread.main(ActivityThread.java:8430)
[AndroidRuntime] at java.lang.reflect.Method.invoke(Native Method)
[AndroidRuntime] at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:596)
[AndroidRuntime] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
解决方法
我没有 Temp1
和 Temp2
。我创建了一个 Shell 模板来测试。它适用于我的身边。您可以查看下面的代码。
XML:
<ShellContent
Title="titleA"
ContentTemplate="{DataTemplate local:ItemsPage}"
Route="routeA" />
<ShellContent
Title="titleB"
ContentTemplate="{DataTemplate local:AboutPage}"
Route="routeB" />
<MenuItem Command="{Binding LogoutCommand}" Text="Page1" />
代码hebind:
,
public partial class AppShell : Xamarin.Forms.Shell
{
public ICommand LogoutCommand => new Command(async () => await Shell.Current.GoToAsync("page1"));
public AppShell()
{
InitializeComponent();
Routing.RegisterRoute("page1",typeof(Page1));
this.BindingContext = this;
}
}
当我按照此处的提示将 Xamarin.Google.Android.Material 降级到 v1.2.1.1 时,我能够更正此错误:
https://github.com/xamarin/Xamarin.Forms/issues/13843
android – Xamarin.Auth得到disallowed_useragent错误[Xamarin.Forms]
我试图用谷歌和Facebook实现登录.我已成功使用Xamarin.Auth实现Facebook登录,但在Google登录中我收到错误disallowed_useragent,我知道Google已经更改了他们的政策,并且不允许使用WebView登录,但是还有其他方法可以在Xamarin中使用Google登录.表格(便携式)?
谢谢.
解决方法:
这是Google的新限制,他们不再允许在嵌入式网页浏览中使用他们的登录界面.因此,您可以在“本地视图” – 外部浏览器(chrome标签,safari等)中为您的应用实施授权.他们会将结果返回给您的应用.
Google的工作示例如下:@H_301_11@Authenticating Users with an Identity Provider
android – Xamarin.IOS错误 – 无法解析参考:C:/ Program Files(x86)/../ Xamarin.iOS / v1.0 / Facades / System.Private.CoreLib.InteropServices.dll
我正在使用Visual Studio 2015和Window 10操作系统来制作xamarin项目.我已经在MAC PC上安装了Xamarin工作室来运行IOS项目.
我的IOS和android项目成功运行,但是当我更新MAC PC中的Xamarin工作室时,它会在ios项目中出现错误:
无法解析参考:C:/ Program Files(x86)/ Reference Assemblies / Microsoft / Framework / Xamarin.iOS / v1.0 / Facades / System.Private.CoreLib.InteropServices.dll
请建议我如何解决这个错误.
提前致谢
解决方法
HarmonyOS 三方件开发指南 (16)-VideoCache 视频缓存
目录:
1、引言
2、功能介绍
3、VideoCache 使用指南
4、VideoCache 开发指南
5、《HarmonyOS 三方件开发指南》系列文章合集
引言
对于视频播放器这个 app 大家都不陌生,在我们日常生活中随处可见,但对于用户而言,最重要的就是如何能节约流量,使用简单,观看视频流畅等体验。对于 Android VideoCache 在各大网站的学习文档、教程已经很多,而且层出不穷,但是对于鸿蒙来讲,还是一个新的领域,因此,鸿蒙版的 VideoCache 顺势而为,华丽的诞生了。
功能介绍
鸿蒙 VideoCache 视频缓存组件,主要功能包括:视频缓冲,在线播放视频,边下载边缓存,缓冲进度和播放进度同时进行,拖动播放,横竖屏切换,音量调节等主要功能。模拟机效果图如下:
1. 竖屏状态:
2. 横屏状态
接下来得内容就是重中之重,对于开发者来讲,如何简单并且快速的使用该 VideoCache 视频缓存组件,这才是开发者最关注的问题。下面则详细介绍 VideoCache 的使用以及开发指南。
VideoCache 使用指南
Ø 新建工程, 添加组件 Har 包依赖
在应用模块中添加 HAR,只需要将 videocachelibrary-debug.har 复制到 entry\libs 目录下即可
Ø 修改配置文件
1. 在 entry 下面的 build.gradle 添加 library 的依赖,如图所示:
1. 修改代码中的配置:
a. 在基类中实例化代理服务,核心代码如下:
httpProxyCacheServer =
new HttpProxyCacheServer.Builder(theApplication).headerInjector(new UserAgentHeadersInjector())
.maxCacheSize(1024 * 1024 * 1024)// 1 Gb for cache
.singleFileBandwidth(600)//单位KB,https需要1.5倍左右
.build();
b. 在使用的地方初始化播放器,并调用代理服务将新生成的路径传入播放器,代码如下:
proxyUrl = BaseSlice.getProxy().getProxyUrl("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4");
BaseSlice.getProxy().registerCacheListener(mCacheListener, proxyUrl);//缓存监听
playerVideo = new PlayerVideo(this, proxyUrl, this, layout);
playerVideo.setDisplayMath(0, 1000);
c. 其他相关设置方法,代码如下:
* 设置播放器的宽高
dependentLayout.setWidth(width);
dependentLayout.setHeight(height);
或者:
dependentLayout.setWidth(ComponentContainer.LayoutConfig.MATCH_PARENT);
dependentLayout.setHeight(ComponentContainer.LayoutConfig.MATCH_PARENT);
* 设置播放器的横竖屏
//横屏
abilitySlice.getAbility().setDisplayOrientation(AbilityInfo.DisplayOrientation.LANDSCAPE);
//竖屏
abilitySlice.getAbility().setDisplayOrientation(AbilityInfo.DisplayOrientation.PORTRAIT);
//系统判断
abilitySlice.getAbility().setDisplayOrientation(AbilityInfo.DisplayOrientation.UNSPECIFIED);
//跟随栈中应用
abilitySlice.getAbility().setDisplayOrientation(AbilityInfo.DisplayOrientation.FOLLOWRECENT);
* 初始化播放器
player = new Player(context);
surfaceProvider.pinToZTop(false);
java.util.Optional<ohos.agp.graphics.SurfaceOps> optional = surfaceProvider.getSurfaceOps();
SurfaceOps surfaceOps = optional.get();
surfaceOps.addCallback(new VideoSurfaceCallback(surfaceOps, loadUrl,
player, this
));
* 播放方法
player.play();
* 暂停播放方法
player.pause();
VideoCache 开发指南
在上述中,已经大概说了 VideoCache 的功能点,视频缓冲,在线播放视频,边下载边缓存,缓冲进度和播放进度同时进行,拖动播放,横竖屏切换,音量调节等主要功能,接下来一 一说明主要实现方法。
在视频播放器中,最常见的就是缓冲进度条,进度条用户可以很直观的看到目前已经缓冲的视频有多少,缓冲了多长时间,进度条设置代码如下:
progressBar.setMaxValue(100);
progressBar.setMinValue(0);
progressBar.setProgressValue(cacheProgress);
通过根据已经缓冲的字节,即可计算出 cacheProgress
MaxValue 值不是固定的 100,也可以按照视频的时长、字节等设置,然后计算百分比即可,根据具体需求设计。
MinValue 设置 progress 的起始点,最初的起始点肯定是 0,但是当视频在播放中途,暂停,在开始的时候,则需要设置为暂停时的值,这样不至于又回到 0 来观看视频。
最后,既然是视频缓存组件,那么重中之重就是如何缓存,接下来重点介绍
VideoCache 主要通过代理策略将网络请求代理到本地服务,本地在决定是从本地缓存拿数据还是发起网络请求,如果发起网络请求就先将数据写入缓存,再从本地提供视频数据给视频播放器,参考下图
这样就达到了边播放边缓存的策略。
具体步骤如下:
1. 在项目的基类初始化一个全局的代理服务 HttpProxyCacheServer,
2. 生成缓存文件名,默认是使用的 MD5 方式生成 key,考虑到一些业务逻辑,我们也可以继承一个 FileNameGenerator 来实现自己的策略,具体代码如下:
3. 本地代理实现策略,首先是构造一个本地 127.0.0.1 的 ServerSocker,随机分配了一个端口,然后启动一个线程去执行 WaitRequestsRunnable,在这里面执行 waitForRequest,通过 accept () 方法监听这个服务器 socket 的入站连接,accept () 方法会一直阻塞,直到有一个客户端尝试建立连接。
1. FileCache 类
类中规定了缓存文件的命名格式(后加.download)和存储的路径,完成了缓存文件的创建。
2. Files 类
此类是对 JAVA 中原有的 File 类的封装,原 File 类仅可处理一个文件,Files 类可同时对多个文件进行处理。
如下代码中,getLruListFiles () 方法的参数是一个 directory,在方法中对 directory(文件夹路径)下的所有文件进行拆分,返回了一个 File 参数类型的 List 列表,后续可对列表中的各个 File 文件进行处理。
3. LruDiskUsage 类
此类主要用于控制缓存文件的大小,它与 Videocache 平行开了一个线程,实时记录缓存文件的数量、大小、存储空间等,超过预设的阈值时,执行特定的优化操作。
4. Md5FileNameGenerator 类
此类实现了为输入文件路径,生成对应的 MD5 值的功能。MD5 值是一种被 "压缩" 的保密格式,可以确保信息完整传输。
5. TotalCountLruDiskUsage 类、TotalSizeLruDiskUsage 类和 UnlimitedDiskUsage 类
LruDiskUsage 类是标题中前两个类的父类,同时控制缓存文件的大小和数量,需要判断当前缓存文件的(总大小 & 总数量)未超过阈值时,才会缓存新的文件。 TotalCountLruDiskUsage 类和 TotalSizeLruDiskUsage 类分别只对缓存文件总数量或者缓存文件总大小进行限制,满足一个条件便可以缓存新的文件。
TotalCountLruDiskUsage 类和 TotalSizeLruDiskUsage 类各有两个方法:一个方法用于设定缓存文件的阈值;一个方法用于判断当前缓存数据是否超过了设定的阈值。
当不需要进行磁盘的缓存限制时使用 UnlimitedDiskUsage 类,其本身是一个空的类,不对缓存文件的数量和大小做任何限制。
更多原创,请关注 " 软通动力 HarmonyOS 学院 https://harmonyos.51cto.com/column/30
想了解更多内容,请访问 51CTO 和华为合作共建的鸿蒙社区: https://harmonyos.51cto.com
关于Xamarin - 从媒体插件拍摄的媒体中清除 ios/Android 上的图片/视频缓存和xamarin文件操作的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于(Android) Xamarin Forms shell 应用程序在最新的 Xamarin 更新后崩溃、android – Xamarin.Auth得到disallowed_useragent错误[Xamarin.Forms]、android – Xamarin.IOS错误 – 无法解析参考:C:/ Program Files(x86)/../ Xamarin.iOS / v1.0 / Facades / System.Private.CoreLib.InteropServices.dll、HarmonyOS 三方件开发指南 (16)-VideoCache 视频缓存的相关信息,请在本站寻找。
本文标签: