- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我开始意识到将所有这些音频文件打包到 xap 中只是一个坏主意,因为它现在已经增长到大约 60 mb。我不想再将我的音频文件与应用程序打包在一起,而是想使用 URL 并在用户按下声音按钮时将它们加载到独立存储中。我不确定如何使用我的应用程序执行此操作,因为我的按钮没有单独编码。它们会自动从 View 模型加载到 LongListSelectors 中。并根据单击哪个播放(data.filepath)。下面,我尝试使用独立存储但收到错误。
更新的 mainpage.cs:
public partial class MainPage : PhoneApplicationPage
{
public string FilePath { get; set; }
WebClient _webClient;
// Constructor
public MainPage()
{
InitializeComponent();
// Set the data context of the listbox control to the sample data
DataContext = App.ViewModel;
//webclient download
_webClient = new WebClient();
_webClient.OpenReadCompleted += (s1, e1) =>
{
if (e1.Error == null)
{
try
{
string fileName = FilePath.
Substring(FilePath.LastIndexOf("/") + 1).Trim();
bool isSpaceAvailable =
IsSpaceIsAvailable(e1.Result.Length);
if (isSpaceAvailable)
{
// Save mp3 to Isolated Storage
using (var isfs = new IsolatedStorageFileStream(
fileName, FileMode.CreateNew,
IsolatedStorageFile.GetUserStoreForApplication()))
{
long fileLen = e1.Result.Length;
byte[] b = new byte[fileLen];
e1.Result.Read(b, 0, b.Length);
isfs.Write(b, 0, b.Length);
isfs.Flush();
}
}
else
{
MessageBox.Show("Not enough to save space available to download mp3.");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
else
{
MessageBox.Show(e1.Error.Message);
}
};
}
// Check to make sure there are enough space available on the phone
// in order to save the image that we are downloading on to the phone
private bool IsSpaceIsAvailable(long spaceReq)
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
long spaceAvail = store.AvailableFreeSpace;
if (spaceReq > spaceAvail)
{
return false;
}
return true;
}
}
// Sample code to localize the ApplicationBar
// Load data for the ViewModel Items
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (!App.ViewModel.IsDataLoaded)
{
App.ViewModel.LoadData();
}
}
private void LongListSelector_SelectionChanged(
object sender, SelectionChangedEventArgs e)
{
LongListSelector selector = sender as LongListSelector;
// verifying our sender is actually a LongListSelector
if (selector == null)
return;
SoundData data = selector.SelectedItem as SoundData;
// verifying our sender is actually SoundData
if (data == null)
return;
if (File.Exists(data.FilePath))
{
AudioPlayer.Source = new Uri(
data.FilePath,
UriKind.RelativeOrAbsolute);
}
else
{
using (var storageFolder =
IsolatedStorageFile.GetUserStoreForApplication())
{
using (var stream = new IsolatedStorageFileStream(
data.FilePath, FileMode.Open, storageFolder))
{
AudioPlayer.SetSource(stream);
}
}
}
selector.SelectedItem = null;
这是我的 SoundModel 模型的一部分。我留下了一个例子,说明它现在是如何使用本地存储进行设置的。另一个是 id 喜欢使用 url 的方式。
private SoundGroup CreateGamesGroup()
{
SoundGroup data = new SoundGroup();
data.Title = "Games";
string basePath = "assets/audio/Games/";
data.Items.Add(new SoundData
{
Title = "Gauntlet Exit",
FilePath = basePath + "GauntletExit.mp3",
Groups = "VideoGames"
});
data.Items.Add(new SoundData
{
Title = "Gauntlet Exit",
FilePath =
"http://k007.kiwi6.com/hotlink/23lenhzr3h/GauntletExit.mp3",
Groups="VideoGames"
});
由于 Mainpage.cs 引用了 SoundData 模型,因此我也将在此处添加:
public class SoundData : ViewModelBase
{
public string Title { get; set; }
public string FilePath { get; set; }
public string Items { get; set; }
public string Groups { get; set; }
public RelayCommand<string> SaveSoundAsRingtone { get; set; }
private void ExecuteSaveSoundAsRingtone(string soundPath)
{
App.Current.RootVisual.Dispatcher.BeginInvoke(() =>
{
SaveRingtoneTask task = new SaveRingtoneTask();
task.Source = new Uri("appdata:/" + this.FilePath);
task.DisplayName = this.Title;
task.Show();
}
);
}
public SoundData()
{
SaveSoundAsRingtone =
new RelayCommand<string>(ExecuteSaveSoundAsRingtone);
}
目前 url 无法正常工作,正如我预期的那样。我收到这些错误:
在 mscorlib.ni.dll 中发生类型为“System.IO.IsolatedStorage.IsolatedStorageException”的第一次机会异常mscorlib.ni.dll 中出现“System.IO.IsolatedStorage.IsolatedStorageException”类型的异常,但未在用户代码中处理附加信息:IsolatedStorageFileStream 上不允许的操作。
最佳答案
不确定这是否是您问题的根本原因,但您需要对 XAP 中包含的文件使用 appdata:/
,否则使用 isostore:/
当您通过暴露的属性将项目绑定(bind)到 LongListSelector 时,您可以将命令分配给您的项目并处理 View 模型中的“点击”。
假设您的 VM 中有以下内容:
public ObservableCollection<SoundData> AudioFiles { get; set; }
public ICommand PlayCommand { get; set; }
然后相关的 XAML 将类似于:
<phone:LongListSelector
x:Name="AudioFilesList"
ItemsSource="{Binding AudioFiles}"
SelectedItem="{Binding SoundData}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<command:EventToCommand
Command="{Binding PlayCommand}"
CommandParameter="{Binding Path=SelectedItem,
ElementName=AudioFilesList}"
PassEventArgsToCommand="False" />
</i:EventTrigger>
</i:Interaction.Triggers>
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<Grid>
<Border BorderThickness="2"
BorderBrush="{StaticResource PhoneForegroundBrush}"
Height="80">
<TextBlock
Text="{Binding FilePath}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Style="{StaticResource PhoneTextNormalStyle}" />
</Border>
</Grid>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
上面重要的部分是LongListSelector的ItemsSource、SelectedItem和PlayCommand的绑定(bind)。
我在@Git 上建立了一个小示例项目,希望它能帮助您解决问题https://github.com/mikkoviitala/any-ringtone
它通过 http 获取少量 mp3,将文件保存到 IsoStore,然后在 LongListSelector 中显示项目。点击列表项启动执行 Ringtonetask 的命令。
关于c# - 音频文件的独立存储不使用单独的点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24367081/
我正在运行一个辅助角色,并检查 Azure 上托管的存储中是否存在数据。当我将连接字符串用于经典类型的存储时,我的代码可以正常工作,但是当我连接到 V2 Azure 存储时,它会抛出此异常。 “远程服
在我的应用程序的主页上,我正在进行 AJAX 调用以获取应用程序各个部分所需的大量数据。该调用如下所示: var url = "/Taxonomy/GetTaxonomyList/" $.getJSO
大家好,我正在尝试将我的商店导入我的 Vuex Route-Gard。 路由器/auth-guard.js import {store} from '../store' export default
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我的 Windows 计算机上的本地文件夹中有一些图像。我想将所有图像上传到同一容器中的同一 blob。 我知道如何使用 Azure Storage SDKs 上传单个文件BlockBlobServi
我尝试发出 GET 请求来获取我的 Azure Blob 存储帐户的帐户详细信息,但每次都显示身份验证失败。谁能判断形成的 header 或签名字符串是否正确或是否存在其他问题? 代码如下: cons
这是用于编写 JSON 的 NeutralinoJS 存储 API。是否可以更新 JSON 文件(推送数据),而不仅仅是用新的 JS 对象覆盖数据。怎么做到的??? // Javascript
我有一个并行阶段设置,想知道是否可以在嵌套阶段之前运行脚本,所以像这样: stage('E2E-PR-CYPRESS') { when { allOf {
我想从命令行而不是从GUI列出VirtualBox VM的详细信息。我对存储细节特别感兴趣。 当我在GUI中单击VM时,可以看到包括存储部分在内的详细信息: 但是到目前为止,我还没有找到通过命令行执行
我有大约 3500 个防洪设施,我想将它们表示为一个网络来确定流动路径(本质上是一个有向图)。我目前正在使用 SqlServer 和 CTE 来递归检查所有节点及其上游组件,只要上游路径没有 fork
谁能告诉我 jquery data() 在哪里存储数据以及何时删除以及如何删除? 如果我用它来存储ajax调用结果,会有性能问题吗? 例如: $("body").data("test", { myDa
有人可以建议如何为 Firebase 存储中的文件设置备份。我能够备份数据库,但不确定如何为 firebase 存储中的文件(我有图像)设置定期备份。 最佳答案 如何进行 Firebase 存储的本地
我最近开始使用 firebase 存储和 firebase 功能。现在我一直在开发从功能到存储的文件上传。 我已经让它工作了(上传完成并且文件出现在存储部分),但是,图像永远保持这样(永远在右侧加载)
我想只允许用户将文件上传到他们自己的存储桶中,最大文件大小为 1MB,仍然允许他们删除文件。我添加了以下内容: match /myusers/{userId}/{allPaths=**} { al
使用生命周期管理策略将容器的内容从冷访问层移动到存档。我正在尝试以下策略,希望它能在一天后将该容器中的所有文件移动到存档层,但事实并非如此在职的。我设置了选择标准“一天未使用后”。 这是 json 代
对于连接到 Azure 存储端点,有 http 和 https 两个选项。 第一。 https 会带来开销,可能是 5%-10%,但我不支付同一个数据中心的费用。 第二。 http 更快,但 Auth
有人可以帮我理解这一点吗?我创建了Virtual Machine in Azure running Windows Server 2012 。我注意到 Azure 自动创建了一个存储帐户。当我进入该存
我是一名优秀的程序员,十分优秀!