Android的开放的onNewIntent总是空(Android onNewIntent Uri

2019-06-25 10:52发布

在我的活动的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";

我缺少什么吗? 谢谢

Answer 1:

你应该调用getData()intent参数或执行setIntent(intent)获得URI之前。 onNewIntent()不会自动设置新的意图。

更新:所以,我这里还有两种方法可以实现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()



文章来源: Android onNewIntent Uri is always null