Я пытаюсь иметь мое приложение отображать регистрационную деятельность, когда пользователь выбирает «Добавить учетную запись» в «Счета & Sync " или хочет использовать приложение и ещё не войти в систему. Я последовал примеру SampleSyncAdapter довольно близко, но не может заставить его работать и получить следующее исключение вместо:Нет активности не найдено для обработки Intent {акт = android.accounts.AccountAuthenticator}, даже если у меня есть один
No Activity found to handle Intent { act=android.accounts.AccountAuthenticator }
Моя служба аутентификации содержит:
public IBinder onBind(Intent intent) {
IBinder ret = null;
if (intent.getAction().equals(android.accounts.AccountManager.ACTION_AUTHENTICATOR_INTENT)){
ret = getAuthenticator().getIBinder();
}
return ret;
}
Мои AndroidManifest.xml
:
<service android:name=".auth.MyAuthService"
android:exported="true"
android:process=":auth">
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
<meta-data android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticator"
/>
Моя основная деятельность:
startActivity(new Intent(android.accounts.AccountManager.ACTION_AUTHENTICATOR_INTENT));
Я пытался делать так:
Intent svc = new Intent(this, CreazaAuthService.class);
startService(svc);
и:
bindService(new Intent(android.accounts.AccountManager.ACTION_AUTHENTICATOR_INTENT), null, BIND_AUTO_CREATE);
перед startActivity()
вызова, но до сих пор не может найти активность для этого намерения. Если я попытаюсь добавить учетную запись через учетные записи &, то синхронизация моего приложения завершится с тем же ActivityNotFoundException
.
Что я делаю неправильно?
EDIT
Я рассмотрел last.fm приложение C99, который определяет пользовательское действие и использует намерения на основе этого действия, а не android.accounts.AccountManager.ACTION_AUTHENTICATOR_INTENT
. Это лучший подход? Есть ли способ заставить его работать с учетной записью & Sync?
Awesome. Спасибо! – juell
Если вам интересно, _why_ это работает, оно зарыто в документации [Intents and Intent Filters] (http://developer.android.com/guide/components/intents-filters.html). «Android обрабатывает все неявные намерения, переданные startActivity(), как если бы они содержали по крайней мере одну категорию:« android.intent.category.DEFAULT »(константа CATEGORY_DEFAULT). Поэтому действия, желающие получить неявные намерения, должны включать« андроид ». intent.category.DEFAULT "в своих фильтрах намерений." –