我正在開發一個Android 3.0程序,該程序可以連接到SSL'd php webservice(輸出JSON數據,我可以修改服務器)。連接到此服務的平板電腦具有企業Microsoft ActiveSync(Exchange 2010)帳戶,並且只有該帳戶(不包括谷歌帳戶,FB等)。我想編寫一個程序,可以使用平板電腦android.accounts.AccountManager中保存的憑據在該PHP web服務上發出安全請求。我嘗試了一些谷歌示例,但我認爲問題在於我使用該行時: AccountManagerFuture<Bundle> data = am.getAuthToken(b, "JWT", options, this, ota, null);
應用程序只是掛起,我沒有得到任何結果。實際上,在OnTokenAcquired類中的任何一行設置斷點都不會做任何事情。 AKA OnTokenRequired從未得到執行通過Android的AccountManager獲取Microsoft Exchange身份驗證令牌
任何建議或方向?我敢肯定,這可以爲企業獲取Android客戶端軟件是有幫助的
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountManagerFuture;
import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
public class AcctestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AccountManager am = AccountManager.get(this);
EditText et = (EditText) findViewById(R.id.editText1);
OnTokenAcquired ota = new OnTokenAcquired(et);
Account exchange = null;
Bundle options = new Bundle();
for(Account a : am.getAccounts()){
if(a.type.equals("com.android.exchange") && a.name.endsWith("@domain.com"))
exchange = a;
}
AccountManagerFuture<Bundle> data = am.getAuthToken(exchange, "JWT", options, this, ota, null);
}
}
import android.accounts.AccountManager;
import android.accounts.AccountManagerCallback;
import android.accounts.AccountManagerFuture;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.Toast;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class OnTokenAcquired implements AccountManagerCallback<Bundle> {
private EditText et;
public OnTokenAcquired(EditText et){
this.et = et;
}
public void run(AccountManagerFuture<Bundle> result) {
Bundle bundle;
try {
Toast.makeText(null, "Start!", Toast.LENGTH_LONG).show();
bundle = result.getResult(1, TimeUnit.SECONDS);
String token = bundle.getString(AccountManager.KEY_AUTHTOKEN); et.append("\nToken: " + token);
Toast.makeText(null, token, Toast.LENGTH_LONG).show();
} catch (OperationCanceledException e) {
e.printStackTrace();
} catch (AuthenticatorException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
你知道這是否在2016年發生了變化? –