2012-06-12 79 views
3

在我的活動的onNewIntent()方法中,getIntent().getData();始終爲空。在進入onCreate()或任何其他生命週期函數之前,它肯定會採用這種方法。它從瀏覽器返回,我不知道爲什麼getIntent().getData()是空的。Android onNewIntent Uri始終爲空

這個活動開始像這樣context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(requestToken.getAuthenticationURL())));

瀏覽器,在這裏返回

@Override 
public void onNewIntent(Intent intent){ 
    super.onNewIntent(intent); 

    Uri uri = getIntent().getData(); 
    if (uri != null && uri.toString().startsWith(TwitterConstants.CALLBACK_URL)) {...} 
} 

但URI總是空。

清單內容:

<activity 
     android:name="myapp.mypackage.TweetFormActivity" 
     android:configChanges="orientation|keyboardHidden" 
     android:label="@string/app_name" 
     android:launchMode="singleInstance" 
     android:screenOrientation="portrait" 
     android:theme="@android:style/Theme.Black.NoTitleBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <data android:scheme="oauth" android:host="myapp"/> 
     </intent-filter> 
     </activity> 

static final String CALLBACK_URL = "oauth://myapp"; 

我缺少什麼嗎?謝謝

回答

12

對於intent參數,您應該致電getData()或在獲取URI之前執行setIntent(intent)onNewIntent()不會自動設置新的意圖。

UPDATE:所以,這裏有兩種方法可以實施onNewIntent()。第一個用舊的意圖替換舊的意圖,所以當你稍後致電getIntent()時,您將收到新的意圖。

@Override 
protected void onNewIntent(final Intent intent) { 
    super.onNewIntent(intent); 
    // Here we're replacing the old intent with the new one. 
    setIntent(intent); 
    // Now we can call getIntent() and receive the new intent. 
    final Uri uri = getIntent().getData(); 
    // Do something with the URI... 
} 

第二種方法是使用新意圖中的數據保留原來的意圖。

@Override 
protected void onNewIntent(final Intent intent) { 
    super.onNewIntent(intent); 
    // We do not call setIntent() with the new intent, 
    // so we have to retrieve URI from the intent argument. 
    final Uri uri = intent.getData(); 
    // Do something with the URI... 
} 

當然,你可以用兩種變型的組合,但不要指望從getIntent()接收新的意圖,直到你明確地setIntent()設置。

+0

HM,在這裏通過'http:// androidforums.com /介紹/ 218621-twitter4j-OAuth的Android的simple.html'他們不叫setIntent – CQM

+1

沒錯,所以他們使用意圖的說法,而不是getIntent( ) 方法。 – Michael

+0

我認爲這個!謝謝,我在這上面花了很多時間! – CQM