2017-02-02 15 views
0

私は1つのアプリを持っており、私のAccountManagerファイルは1つの中央アプリにあります。そのセントラルアプリでAccountManager.AddAccount()を使用できますが、他のアプリからそのメソッドを使用しようとすると、AuthenticatorActivityは開始されません。デバッグして、AddAccountのコードがすべて実行されていることを確認できますが、アクティビティは起動されません。私はのaddAccountが同じである呼び出すコードので、私のアプリケーションのすべてに同じスプラッシュ画面を使用し別のアプリで起動したときにAccountAuthenticatorActivityが起動しないのはなぜですか?

​​

は、ここに私のaddAccount方法です。

 _accountManager = AccountManager.Get(this); 
     var accounts = _accountManager.GetAccountsByType(AccountKeys.ACCOUNT_TYPE); 

     //automatically add new account if no users on device yet 
     if (accounts.Length == 0) 
     { 
      _accountManager.AddAccount(AccountKeys.ACCOUNT_TYPE, AccountKeys.AUTH_TYPE, null, null, this, null, null); 
      CheckIfFirstRun(); 
      Finish(); 
     } 

MyAccountAuthenticatorActivityは1つのアプリにあります。ご覧のとおり、私は正しいアクティビティコンテキストをAddAccountに送信していますが、StartActivity()は認証コードを所有するアプリケーションでコードが実行されたときにのみ呼び出されます。

私の他のアプリがMyAccountAuthenticatorActivityを開くために他に何が欠けていますか? AddAccountを呼び出すと、コールバックをnullに設定する必要がありますか?コールバックの使い方を完全には理解していないので、これを行う方法を理解できません。javaの例のどれもがこれを持っていないからです。

また、私はそうのような私の他のアプリのマニフェストにMyAccountAuthenticatorActivityを追加しようとしている:

<activity android:name="com.redacted.authenticator.MyAccountAuthenticatorActivity" /> 

しかし、これは何も変わりません。私は他のアプリがAuthenticatorServiceを見ていることを知っています、彼らは単にアクティビティを起動しません。

答えて

0

なぜ、AddAccount()がアクティビティ自体を起動しないのかわかりませんでしたが、回避策を見つけることができました。私はちょうど意図を自分で処理することができました。

これは私が(任意のアプリからの)新しいアカウントの追加を開始私のコードスニペットです:AddAccount()Activityとしてnullを送信することにより

  var adapter = new AccountPickerArrayAdapter(this, accounts); 
      var builder = new AlertDialog.Builder(new ContextThemeWrapper(this, Resource.Style.AppTheme)); 
      builder.SetTitle(Resource.String.choose_account); 
      builder.SetAdapter(adapter, 
       (s, a) => 
       { 
        var dialog = (AlertDialog)s; 
        dialog.Dismiss(); 
        GetExistingAuthToken(accounts[a.Which]); 
        FinishLogin(accounts[a.Which]); 
       }); 
      builder.SetNeutralButton(Resource.String.add_new_account, 
       (s, e) => 
       { 
        var dialog = (AlertDialog)s; 
        dialog.Dismiss(); 
        var thread = new Thread(AddNewAccount); 
        thread.Start(); 
        CheckIfFirstRun(); 
        Finish(); 
       }); 
      builder.Create().Show(); 
     } 

     void AddNewAccount() 
     { 
      var future = _accountManager.AddAccount(AccountKeys.ACCOUNT_TYPE, AccountKeys.AUTH_TYPE, null, null, null, null, null); 
      var bundle = future.Result as Bundle; 
      if (bundle != null) 
      { 
       var intent = bundle.GetParcelable(AccountManager.KeyIntent) as Intent; 
       StartActivity(intent); 
      } 
     } 

、希望の意図は、バンドルに返されます。私はその意図を直接発動することができます。

また、私はAccountAuthenticatorActivityのマニフェストエントリに(Exported = true)を追加する必要がありました。これにより、他のアプリがそのアクティビティを起動できます。

関連する問題