添加帐户(设置)方法不会启动活动

时间:2015-01-01 12:05:24

标签: android account

我想在设置中创建自定义应用帐户。

问题

  1. settings > Add account中有一个图标选项,但没有名称
  2. 点击它(添加帐户)时,AuthenticatorActivity无法启动。我调试了Authenticator类,调用了addAccount方法但没有弹出任何活动。
  3. 我做了以下步骤:

    Authenticator类(部分)

    public class AccountAuthenticator extends AbstractAccountAuthenticator{
        @Override
        public Bundle addAccount(AccountAuthenticatorResponse response,
                String accountType, String authTokenType,
                String[] requiredFeatures, Bundle options)
                throws NetworkErrorException {
            final Intent intent = new Intent(mContext, AuthenticatorActivity.class);
            intent.putExtra(AuthenticatorActivity.ARG_ACCOUNT_TYPE, accountType);
            intent.putExtra(AuthenticatorActivity.ARG_AUTH_TYPE, authTokenType);
            intent.putExtra(AuthenticatorActivity.ARG_IS_ADDING_NEW_ACCOUNT, true);
            intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
            final Bundle bundle = new Bundle();
            bundle.putParcelable(AccountAuthenticator.KEY_INTENT, intent);
            return bundle;
        }
    }
    

    AuthenticatorService

    public class AuthenticatorService extends Service{
         @Override
        public IBinder onBind(Intent intent) {
            authenticator = new AccountAuthenticator(this);
            return authenticator.getIBinder();
        }
    }
    

    清单

    <service android:name="com.voillo.utils.AuthenticatorService" android:exported="false"
                android:label="@string/app_name">
         <intent-filter>
            <action android:name="android.accounts.AccountAuthenticator" />
         </intent-filter>
         <meta-data android:name="android.accounts.AccountAuthenticator"
                   android:resource="@xml/authenticator" />
    </service>
    

    authenticator xml

    <account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
         android:accountType="com.example.myapp"
         android:icon="@drawable/myapp_icon"
         android:smallIcon="@drawable/myapp_icon_small"
         android:label="myapp"
         />
    

2 个答案:

答案 0 :(得分:5)

您忘记在清单文件上声明活动的可能性很高。我遇到了同样的错误,发现我忘了在项目的清单上宣布我的活动。

答案 1 :(得分:0)

我一直在与这个问题作斗争,有一个同样的问题:我的AddAccount()正在从手机设置中调用,但是活动尚未启动。我设法通过将额外内容放入方法中作为参数传递的包中而不是创建新的包来解决此问题。在您的情况下,它应如下所示:

public class AccountAuthenticator extends AbstractAccountAuthenticator{
@Override
public Bundle addAccount(AccountAuthenticatorResponse response,
        String accountType, String authTokenType,
        String[] requiredFeatures, Bundle options)
        throws NetworkErrorException {
    final Intent intent = new Intent(mContext, AuthenticatorActivity.class);
    intent.putExtra(AuthenticatorActivity.ARG_ACCOUNT_TYPE, accountType);
    intent.putExtra(AuthenticatorActivity.ARG_AUTH_TYPE, authTokenType);
    intent.putExtra(AuthenticatorActivity.ARG_IS_ADDING_NEW_ACCOUNT, true);
    intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);

    bundle.putParcelable(AccountAuthenticator.KEY_INTENT, intent);
    return bundle;
}

关于XML文件中的标签,还需要使用一种资源来使其显示在“电话设置”中。

    android:label="@string/app_name"

希望这会有所帮助。