2016-09-23 6 views
0

私はxamarinフォームアプリケーションでBTを有効にするための依存関係サービスを使用しようとしています。しかし、Iamは結果をxamarin形式に戻すのが難しいと感じています。 activityresult通知をフォームアプリケーションに戻すメカニズムはありますか?フォームで 、アンドロイドでxamarinフォームのインテントアクティビティ結果の取得方法

DependencyService.Get<IBluetoothHandler>().EnableBluetooth(); 

、私はフォームにこの活動の結果を取得できますか

Activity activity = Forms.Context as Activity; 
Intent intent = new Intent(BluetoothAdapter.ActionRequestEnable); 
activity.StartActivityForResult(intent, 1); 

おかげ

答えて

1

あなたはあなたのAndroidプロジェクトであなたのMainActivityOnActivityResultメソッドをオーバーライドすることができます。 Xamarin.Formsはアプリ全体(舞台裏で)のアクティビティを1つだけ使用します。だからちょうどこれを使ってください。

Xamarin.Formsが提供するmessagingcenterを使用して、ページ(またはPCL /フォームプロジェクトの別のクラス)に通知します。

ここでは例です:

あなたMainActicity(アンドロイドプロジェクト)でのあなたの方法:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 
{ 
    // Send trough the messaging sender (maybe someone subscribes to it) 
    MessagingCenter.Send(
     new ActivityResultMessage {RequestCode = requestCode, ResultCode = resultCode, Data = data}, ActivityResultMessage.Key); 
} 

その後メッセージングクラス:その後、

public class ActivityResultMessage 
{ 
    public static string Key = "arm"; 

    public int RequestCode { get; set; } 

    public object ResultCode { get; set; } 

    public object Data { get; set; } 
} 

クラスに次のコードを使用します結果を処理する:

// Subscribe to the onactivityresult-message 
MessagingCenter.Subscribe<ActivityResultMessage>(this, ActivityResultMessage.Key, (sender) => 
{ 
    // do some magic =) 
}); 

メッセージの背後にあることを理解するために、messagincenterに関する情報(上記のリンクを参照)をお読みください。 MainActivityで

+0

活動は、破壊することができます。 OnCreateにも同じコードを追加して、バンドルの内容を確認する必要があります – Greensy

+0

ありがとう@Joehl That worked! – user3165999

+1

私の主なアクティビティでOnActivityResultをオーバーライドしようとすると、「オーバーライドする適切な方法がありません」と言われています。私はデフォルトのMainActivity "public class MainActivity:global :: Xamarin.Forms.Platform.Android.FormsAppCompatActivity"を使用しています。どのようにそれを修正するための任意のアイデア? – Dpedrinha

1

この

public static MainActivity Instance; 

とのOnCreateメソッドでの追加を追加します。あなたには、いくつかのアクションを実行している間

Instance = this; 
関連する問題