2012-12-24 47 views
1

當試圖從客戶經理獲得的Gmail用戶名和密碼,會出現以下異常:錯誤在獲取用戶名和密碼

java.lang.SecurityException: caller uid 10073比不同的認證的UID

AccountManager accountManager = AccountManager.get(mContex); 
Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+ 
     Account[] accounts = AccountManager.get(mContex).getAccounts(); 
     for (Account account : accounts) { 
      if (emailPattern.matcher(account.name).matches()) { 
       String possibleEmail = account.name;      
       String possiblePassword = accountManager.getPassword(account) ;     
       System.out.println("User name :- "+possibleEmail); 
       System.out.println("User Password :- "+possiblePassword); 

      } 

     } 

中的Manifest.xml添加權限:

<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"></uses-permission> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission> 
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"></uses-permission> 
    <uses-permission android:name="android.permission.USE_CREDENTIALS"></uses-permission> 
    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 

有關如何解決此異常的任何想法?

+0

發佈您的帳戶驗證程序xml和您的類AuthenticatorService。 – Rahul

+0

有人已經發布了類似的東西http://stackoverflow.com/questions/3403885/securityexception-in-getpassword-of-accountmanager-in-android –

+0

它不可能獲得密碼。我們將獲得用戶名 – User

回答

1

你不能。只有管​​理帳戶的身份驗證器才能訪問存儲的憑據(在這種情況下,Google身份驗證器)。

請參閱AccountManager瞭解如何使用getAuthToken()從認證者請求安全令牌,這將允許您登錄到該帳戶(但不會提供您用戶的密碼)。

許多服務器支持的認證令牌,它可以 使用而不發送 用戶的實際口令進行身份驗證服務器發出請求的一些概念。 (Auth令牌通常使用包含用戶憑證的 單獨請求創建。) AccountManager可以爲應用程序生成授權令牌,因此 應用程序不需要直接處理密碼。

0

如果你從github上下載了它,那麼請確保類中的String ACCOUNT_TYPE與你的驗證器的XML定義中的常量相同。

在file1.java

class AuthenticatorService extends Service { 
public static final String ACCOUNT_TYPE = "com.joelapenna.foursquared"; 

在file1.xml

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android" 
android:accountType="com.joelapenna.foursquared.account" ... /> 

在XML文件中刪除 「...」,這導致該字符串不匹配。

0
Account[] accounts = AccountManager.get(getApplicationContext()) 
       .getAccounts(); 

     for (Account account : accounts) { 

      if (account.name.endsWith("gmail.com")) { 

      String email = account.name; 


      } 

     } 
+0

問題是獲取密碼不是用戶名。 – patel

相關問題