ユーザーが特定のエリアに出入りするときに、ジオフェンスAPIとバックグラウンドタスクを使用して制御するシンプルなwin phone 8.1アプリを構築しています。
バックグラウンド タスクを登録するには、クラスRegisterBackgroundTask
にメソッドを実装しますApp
/// <summary>
/// Initializes the singleton application object. This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
/// </summary>
public App()
{
this.Suspending += this.OnSuspending;
this.RegisterBackgroundTask();
}
private async void RegisterBackgroundTask()
{
const string name = "GeofenceBackgroundTask";
if (BackgroundTaskRegistration.AllTasks.Any(task => task.Value.Name == name))
{
return;
}
var loc = await new Geolocator().GetGeopositionAsync(
TimeSpan.FromMinutes(2),
TimeSpan.FromSeconds(5)); //needed to trig user acceptance
var backgroundAccessStatus =
await BackgroundExecutionManager.RequestAccessAsync();
if (backgroundAccessStatus != BackgroundAccessStatus.Denied)
{
var geofenceTaskBuilder = new BackgroundTaskBuilder()
{
Name = name,
TaskEntryPoint = "RingtoneManager.Background.GeofenceBackgroundTask"
};
geofenceTaskBuilder.SetTrigger(new LocationTrigger(LocationTriggerType.Geofence));
geofenceTaskBuilder.Register();
}
}
そして、これが例外を発生させる部分です
new LocationTrigger(LocationTriggerType.Geofence)
例外の詳細:
System.InvalidCastException was unhandled by user code
HResult=-2147467262
Message=Unable to cast object of type 'System.__ComObject' to type 'Windows.ApplicationModel.Background.ILocationTriggerFactory'.
Source=mscorlib
StackTrace:
at System.StubHelpers.StubHelpers.GetCOMIPFromRCW_WinRT(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget)
at Windows.ApplicationModel.Background.LocationTrigger..ctor(LocationTriggerType triggerType)
at RingtoneManager3.App.<RegisterBackgroundTask>d__2.MoveNext()
私がこれまでに理解したこと:
- 例外コードは 80004002 (E_NOINTERFACE)
私はこのインターフェースが何であるかを調査し、それが宣言され
C:\Program Files (x86)\Windows Phone Kits\8.1\References\CommonConfiguration\Neutral\Windows.winmd
、実際にそこに あることを発見しましたそして、ビジュアルスタジオプロジェクトから参照されています
- 他のすべてのトリガー (SystemTrigger、MaintenanceTrigger など) は正常にインスタンス化されています
私がすでに試したこと:
- VSを再インストール
- クリーン/リビルド ソリューション
- アノテーション
RegisterBackgroundTask
方法[STAThread]
これは、Windows Phone と C# での初めてのアプリなので、ありふれた間違いを犯す可能性があります。また、Visual Studio がソリューションからのこれらの参照を処理する方法と、参照された .winmd ファイルでコード化されたインターフェイスがプロジェクトのコードで使用可能になった方法も理解していません。たぶん、何かがうまくいかないところがあります。だから私は問題の根本を探して解決策を見つけるのに助けが必要です.
前もって感謝します