3

私のアクティビティのonNewIntent()メソッドで getIntent().getData();は、常にnullです。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";

ここで何が欠けていますか?ありがとう

4

1 に答える 1

12

URIを取得する前にgetData()intent引数を呼び出すか実行する必要があります。新しいインテントを自動的に設定しません。setIntent(intent)onNewIntent()

更新:それで、ここにあなたが実装することができる2つの方法がありますonNewIntent()。1つ目は古いインテントを新しいインテントに置き換えるため、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...
}

2番目の方法は、新しいインテントのデータを使用して、古いインテントをそのままにしておくことです。

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

もちろん、2つのバリアントを組み合わせて使用​​することもできますが、で明示的に設定するまで、から新しいインテントを受け取ることは期待できませんgetIntent()setIntent()

于 2012-06-12T22:20:02.773 に答える