Android onNewIntent Uri is always null

android, android-intent, callback, twitter4j, uri

Solution

You should call `getData()` for the `intent` argument or perform `setIntent(intent)` before obtaining URI. `onNewIntent()` doesn't set new intent automatically.

UPDATE: So, here're two ways that you can implement `onNewIntent()`. The first replaces the old intent with the new one, so when you call `getIntent()` later, you will receive the new intent.

@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...
}

The second way is to use data from the new intent leave the old one as-is.

@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...
}

Of course, you can use a combination of two variants, but do not expect to receive the new intent from `getIntent()` until you explicitly set it with `setIntent()`.

Problem

In my activity's onNewIntent() method, `getIntent().getData();` is always null. It definitely goes to this method before going to `onCreate()` or any other lifecycle function. It returns here from a browser, I don't know why `getIntent().getData()` is null though. this activity starts the browser like this `context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(requestToken.getAuthenticationURL())));` and returns here ``` @Override public void onNewIntent(Intent intent){ super.onNewIntent(intent); Uri uri = getIntent().getData(); if (uri != null && uri.toString().startsWith(TwitterConstants.CALLBACK_URL)) {...} } ``` but uri is always null. manifest stuff: ``` <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"; ``` what am I missing here? thanks

Original source