Вопрос по android-intent, callback, twitter4j, uri, android – Android onNewIntent Uri всегда нулевой

3

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

это действие запускает браузер, как это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";

что мне здесь не хватает? Спасибо

Ваш Ответ

1   ответ
12

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

Конечно, вы можете использовать комбинацию из двух вариантов, ноdo not expect to receive the new intent from getIntent() until you explicitly set it with setIntent().

Я ОБЗОР ЭТОГО! спасибо, я потратил много времени на это! CQM
О, нет проблем. Рад, что это помогло!
Да, поэтому они используют аргумент намерения, а не метод getIntent ().
@chintankhetiya, просто используйтеintent вместоgetIntent().
хм, сюдаhttp://androidforums.com/introductions/218621-twitter4j-oauth-android-simple.html они не вызывают setIntent CQM

Похожие вопросы