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/Syste开发者_开发技巧m.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?
From AccountManager.getPassword()
getPassword
: This method requires the caller to hold the permissionAUTHENTICATE_ACCOUNTS
and to have the sameUID
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)
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
精彩评论