使用自定義AccountAuthenticator我有2個獨立的Android項目,一個是AbstractAccountAuthenticator的實施在設備管理用戶帳戶,另一種是推送應用程序應該從AccountAuthenticator獲得令牌,並使用它。與多個應用程序
AbstractAccountAuthenticator的實現工作,並在「設置」菜單中的「帳戶和同步」部分調用時添加帳戶,但是當我從推送應用程序調用addAccount()時,我得到「權限被拒絕:checkComponentPermission( )「和應用程序在那裏死去。
我不能提供太多的源代碼,因爲它不是我的力量,使其能夠上市,但我向你保證,他們在一個「獨立」的方式工作。
我從不同的應用程序中搜索了正確使用AccountManager的例子,但沒有找到任何例子。 freenode也沒有運氣。
我發現從AccountAuthenticator內部啓動活動(使用Intent.FLAG_NEW_TASK和context.startActivity(intent))會訣竅,但這意味着addAccount()不會返回到AccountManager,而我認爲這與開發指南不一致,因爲它違反了AccountManager使用流程。另一種方式是導出請求用戶憑據時使用的Acitivity。但我認爲這可能是一個安全問題,因爲它應該由AccountManager調用,而不是外部。
謝謝你對此有任何想法。
PS:
所有的權限被正確地使用,除非我需要一個特殊的一個,我不知道整個應用程序的工作。
我會問,如果我可以使用的代碼片段顯示在這裏我很關心的線條。
這裏第一個問題貼出來,我希望我沒有違反(米)的任何規則在這裏(我做搜索這裏和谷歌,但我問,因爲我發現沒有什麼用的。)
謝謝您。
潛水到谷歌的登錄服務後,應設置類磕磕絆絆,我已經找到了我想應該是解決方案:
不出口的東西,我一直在想這是一個安全問題來繞過您的實施,成爲服務或活動,繞過AccountManager。
請勿在執行
AbstractAccountAuthenticator
時使用Intent.FLAG_NEW_TASK
和startActivity()
,因爲它會將您帶到意想不到的行爲。
做,這是非常簡單的方式,實際上是:
Intent i = new Intent(Settings.ACTION_ADD_ACCOUNT);
i.putExtra(Settings.EXTRA_AUTHORITIES, new String[] { "com.exaple.yourauth" });
contextVar.startActivity(i);
這樣,你所要求的設置,以提高可能的機構的名單一個新的帳戶,公交車,因爲你加入EXTRA_AUTHORITIES參數,一個有權限顯示的字符串,它將選項限制爲你想要的。如果只有一個符合您的額外要求,則會以適當的方式調用客戶經理和登錄活動。
我真的希望這可以幫助周圍的任何其他人。