开发者

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 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)


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜