Android onNewIntent Uri всегда имеет значение null

В методе getIntent().getData(); моей деятельности getIntent (). getIntent().getData(); Всегда равно нулю. Это определенно идет к этому методу, прежде чем перейти к onCreate() или любой другой функции жизненного цикла. Он возвращается сюда из браузера, я не знаю, почему getIntent().getData() имеет значение null.

Эта активность запускает браузер, как этот 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 всегда null.

Манифест:

  <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"; 

Что мне здесь не хватает? благодаря

Вы должны вызвать getData() для аргумента intent или выполнить setIntent(intent) перед получением URI. 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() .

Intereting Posts
Сохранить ArrayList в общих настройках Как очистить холст в android при нажатии кнопки Android – Как закрыть активность при нажатии кнопки? Как показать диалог прогресса в Android? Невозможно развернуть уведомления Firebase Как заставить всплывающее меню переполнения избежать препятствия панели действий? Андроиды Android с Robotium Как настроить @BindingAdapter с помощью Picasso? Как настроить собственный шрифт для заголовка в андроиде панели инструментов Почему sendTextMessage требует разрешения READ_PHONE_STATE? AlarmManager – Как повторить будильник в верхней части каждого часа? Ошибка: выполнение не выполнено для задачи ': app: fabricGenerateResourcesDebug'. > Ошибка инструмента разработчика Crashlytics Как я могу скрыть элементы управления, полноэкранные кнопки в API-интерфейсе Youtube Player android? Как предотвратить замораживание приложения PhoneGap в Android при выполнении асинхронного вызова AJAX? Изменить настройки мелодии звонка на Android с помощью Phonegap