1

私自身は Windows Phone の開発者ではないため、知識不足であることをあらかじめお詫び申し上げます。

お客様に提供する製品の 1 つに、発信者番号通知アプリがあります。ソフトウェアは次のことを行います。

  1. 着信を検出し、発信者番号を取得します
  2. 連絡先に番号が見つからない場合は、サーバーで名前検索を行います (XML インターフェースへの HTTP Get 要求)。
  3. サーバーから名前が見つかった場合は、電話が鳴っている間に画面に表示します
  4. (結果を連絡先に保存するなど、その他のもの)

Android と Symbian にアプリを実装しましたが、完璧に動作します。このタイプのアプリケーションが Windows Phone でも可能かどうか知りたいです。下請け業者によると、これは以前のバージョンには当てはまりませんでした。これが本当かどうか、また WP8 で変更があったかどうかを知りたいです。

私の質問:

  1. アプリケーションをバックグラウンド プロセスとして実行できますか?
  2. 着信呼び出しは、バックグラウンド プロセスで検出できるイベントを起動しますか?
  3. 着信コールから発信者の電話番号をリアルタイムで取得できますか?
  4. 着信中にバックグラウンドで検索を実行できますか?
  5. 着信中に画面に何か表示できますか?

私がグーグルで調べたところ、「隠蔽」イベントについての言及しか見つかりませんでした。「コール」イベントなどについては何も見つかりませんでした。これはあまり有望ではありませんが、実際の開発者の意見を聞きたいです。

4

1 に答える 1

1

はい(「バックグラウンドエージェント」、http: //www.jeffblankenburg.com/2011/11/25/31-days-of-mango-day-25-background-agents/を検索してください)。

そこから始めて、アプリの仕様に関連するより独立した調査を実行する必要があります。

ジェフの記事によると:

Visual Studioを起動し、新しいプロジェクトを作成します。[Silverlight for Windows Phone]で、[WindowsPhoneアプリケーション]を選択します。「MyAgentApp」という名前を付けます。

これでメインアプリケーションが作成されました。それは2つのことに責任があります:

1)バックグラウンドエージェントが情報で更新できるライブタイルを用意する

2)バックグラウンドエージェントの開始と停止

バックグラウンドエージェント自体は、独自の特別なプロジェクトに存在する必要があります。ソリューションに新しいプロジェクトを追加し、WindowsPhoneのスケジュールされたタスクエージェントを選択します。MyAgentという名前を付けます。このプロジェクトには、バックグラウンドで実行され、ライブタイルを更新するカスタムコードが含まれます。

最後に、これは重要です。MyAgentAppプロジェクトに移動し、プロジェクト参照をMyAgentに追加します。これにより、アプリケーション内からエージェントを登録できるようになります。また、これがWMAppManifest.xmlに自動的に作成されたエントリに注意してください。

<Tasks> 
      <DefaultTask Name="_default" NavigationPage="MainPage.xaml" /> 
      <ExtendedTask Name="BackgroundTask"> 
        <BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="MyAgent" Source="MyAgent" Type="MyAgent.ScheduledAgent" />
      </ExtendedTask> 
    </Tasks> 

次に、実際にすべてを配線します。MainPage.xamlを開き、2つのボタンを追加します。1つはエージェントを開始するためのもので、もう1つはエージェントを停止するためのものです。

<StackPanel VerticalAlignment="Center"> 
        <Button Content="Start Background Agent" 
               Click="StartButton_Click"/> 
        <Button Content="Stop Background Agent" 
               Click="StopButton_Click"/>  
    </StackPanel> 

MainPage.xaml.csで、エージェントを開始および停止するためのボタンを配線します。

private const string TASK_NAME = "MyAgent";
private void StartButton_Click(object sender, RoutedEventArgs e) 
{ 
    StartAgent(); 
}

private void StopButton_Click(object sender, RoutedEventArgs e) 
{ 
    StopAgentIfStarted(); 
}

private void StartAgent() 
{ 
    StopAgentIfStarted();

    PeriodicTask task = new PeriodicTask(TASK_NAME); 
    task.Description = "This is our custom agent for Day 25 - Background Agents";
    ScheduledActionService.Add(task); 
#if DEBUG 
    // If we're debugging, attempt to start the task immediately 
    ScheduledActionService.LaunchForTest(TASK_NAME, new TimeSpan(0, 0, 1));
#endif 
}

private void StopAgentIfStarted() 
{ 
    if (ScheduledActionService.Find(TASK_NAME) != null) 
    { 
        ScheduledActionService.Remove(TASK_NAME); 
    } 
} 

カスタムエージェントを作成するために、新しいPeriodicTaskを作成していることに注意してください。次に、エージェントを見つけて停止するときに、その名前を識別子として使用します。また、PeriodicTask.Descriptionを指定したことにも注意してください。これは必須フィールドであり、[設定]|[設定]に表示されます。アプリケーションの名前でのバックグラウンドタスク。

MyAgentプロジェクトで、ScheduledAgent.csを開き、次のコードを追加します。

protected override void OnInvoke(ScheduledTask task) 
{ 
    UpdateAppTile(GetLastUpdatedTimeMessage()); 
}
private string GetLastUpdatedTimeMessage() 
{ 
    return string.Format("Last Updated: {0}", DateTime.Now); 
}

private void UpdateAppTile(string message) 
{ 
    ShellTile appTile = ShellTile.ActiveTiles.First(); 
    if (appTile != null) 
    { 
        StandardTileData tileData = new StandardTileData 
        { 
            BackContent = message 
        };

        appTile.Update(tileData); 
    } 

}

ScheduledAgentには、オーバーライドする重要なメソッドが1つあります。OnInvokeです。これは、エージェントがバックグラウンドタスクを実行する場所です。タスクが完了し、エージェントを実行する必要がなくなった場合は、NotifyComplete()を呼び出してタスクが正常に完了したことを通知するか、Abort()を呼び出してタスクをキャンセルすることを通知できます。タスクを一定の間隔で実行し続けるには、どちらも呼び出さないでください。これは、ここで行っていることです。

于 2012-12-10T16:50:04.020 に答える