2014-03-05 46 views
0

返回false在我的活動:安卓:DbxAccountManager.hasLinkedAccount()總是在遠程服務

public class MainActivity extends Activity { 
private mDbxAccountManager mDbxAccountManager = null; 

... 

@Override 
public void onCreate(Bundle savedInstanceState) { 

... 

mDbxAccountManager = DbxAccountManager.getInstance(getApplicationContext(), getString(R.string.dbx_app_key), getString(R.string.dbx_app_secret)); 

... 
} 

... 

public void buttonOnClick(View view) { 
if(mDbxAccountManager.hasLinkedAccount()) { 
//Do something 
} 
else { 
mDbxAccountManager.startLink(this, 0); 
} 

... 

} 



} 

而且在我的遠程服務:

public class CloudService extends Service { 
private mDbxAccountManager mDbxAccountManager = null; 

@Override 
public void onCreate() { 

... 

mDbxAccountManager = DbxAccountManager.getInstance(getApplicationContext(), getString(R.string.dbx_app_key), getString(R.string.dbx_app_secret)); 
if(!mDbxAccountManager.hasLinkedAccount()) { 
return; 
stopSelf(); 
} 

... 
} 
} 

的結果是,當我聯繫我的應用程序dropbox使用已安裝的dropbox客戶端,我Activity上的hasLinkedAccount()返回true,同時Remote Service上的相同代碼總是返回false。

我也檢查logcat,它顯示我的應用程序已經與dropbox鏈接。

我的懷疑是Dropbox API在與我的應用程序成功鏈接時創建了一些SharedPreferences,但是我的Remote Service無法訪問它或獲取該SharedPreferences的緩存版本......我不知道......

請幫助...

謝謝

編輯: 如果我重新安裝應用程序,則預期的結果和hasLinkedAccount()返回true,但如果我卸載並重新引起安裝清除用戶數據,然後我再次將我的應用與Dropbox鏈接,然後是同樣奇怪的行爲r再次出現。 我做錯了什麼?我幾乎24小時轉過頭...

回答

0

解決了!

嘗試並嘗試... 我得出的結論是,在與dropbox鏈接的應用程序之前運行的服務將始終獲得DbxAccountManager.hasLinkedAccount()返回false。 我嘗試通過調用Process.killProcess(myservicePid)來終止進程,之後我將其應用程序鏈接到Dropbox並再次啓動服務,並且它可以正常工作。 因此,我解決了這個問題,它在應用程序與Dropbox鏈接之前不啓動服務,並且只有在已經鏈接時才啓動該服務,因爲服務上的stopSelf()不會終止進程。 我認爲這個問題與傳遞給DbxAccountManager.getInstance()的Context getApplicationContext()有關,我不知道爲什麼看起來像Dropbox與應用程序鏈接時沒有更新Context。

謝謝。