user430926
user430926

Reputation: 4057

Get password from android account

I noticed from Android API, they have this method getPassword(Account account).

accountManager = AccountManager.get(this);

Account[] allGoogleAccounts = accountManager.getAccountsByType("com.google");

for (Account account : allGoogleAccounts) 

{
  System.out.println(accountManager.getPassword(account));
}

But I have this error:

11-16 10:49:08.986: WARN/System.err(5732): java.lang.SecurityException: caller uid 10039 is different than the authenticator's uid
11-16 10:49:09.038: WARN/System.err(5732):     at android.os.Parcel.readException(Parcel.java:1247)
11-16 10:49:09.038: WARN/System.err(5732):     at android.os.Parcel.readException(Parcel.java:1235)
11-16 10:49:09.045: WARN/System.err(5732):     at android.accounts.IAccountManager$Stub$Proxy.getPassword(IAccountManager.java:415)
11-16 10:49:09.087: WARN/System.err(5732):     at android.accounts.AccountManager.getPassword(AccountManager.java:277)
11-16 10:49:09.087: WARN/System.err(5732):     at com.test.account.onCreate(account.java:30)
11-16 10:49:09.107: WARN/System.err(5732):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-16 10:49:09.107: WARN/System.err(5732):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-16 10:49:09.125: WARN/System.err(5732):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-16 10:49:09.125: WARN/System.err(5732):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-16 10:49:09.134: WARN/System.err(5732):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-16 10:49:09.156: WARN/System.err(5732):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-16 10:49:09.156: WARN/System.err(5732):     at android.os.Looper.loop(Looper.java:123)
11-16 10:49:09.166: WARN/System.err(5732):     at android.app.ActivityThread.main(ActivityThread.java:4627)
11-16 10:49:09.175: WARN/System.err(5732):     at java.lang.reflect.Method.invokeNative(Native Method)
11-16 10:49:09.185: WARN/System.err(5732):     at java.lang.reflect.Method.invoke(Method.java:521)
11-16 10:49:09.185: WARN/System.err(5732):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-16 10:49:09.195: WARN/System.err(5732):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-16 10:49:09.206: WARN/System.err(5732):     at dalvik.system.NativeStart.main(Native Method)

Anyone can tell me my mistake?

Upvotes: 1

Views: 7522

Answers (2)

Pieces
Pieces

Reputation: 2295

From AccountManager.getPassword()

getPassword: This method requires the caller to hold the permission AUTHENTICATE_ACCOUNTS and to have the same UID as the account's authenticator.

The way I see it you can only get the password if your app was the app that created the account in account manager (Could be mistaking though)

Upvotes: 3

Bilal Naqvi
Bilal Naqvi

Reputation: 140

in account manager if you(your app) write the account then only you(your app) can get the password this is because of security that on app could get the password of the user that he used to sync in other app

you can get the password of the account the is created by your process UID every process have it own UID once it runs on the device and continue to have the same UID ever

Upvotes: 1

Related Questions