2012-06-12 7 views
3

내 활동의 onNewIntent() 메소드에서 getIntent().getData();은 항상 null입니다. onCreate() 또는 다른 라이프 사이클 기능을 사용하기 전에이 방법으로 이동합니다. 그것은 브라우저에서 여기에 반환, 왜 getIntent().getData() null입니다 모르겠다.Android onNewIntent Uri는 항상 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"; 

를 놓친 거지? thanks

답변

12

URI를 얻기 전에 intent 인수에 getData()을 호출하거나 setIntent(intent)을 수행해야합니다. 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... 
} 

은 물론, 당신은 두 가지 변종의 조합을 사용할 수 있지만 명시 적 setIntent()로 설정 될 때까지 getIntent()에서 새 의도를받을 기대하지 않습니다.

+0

hm, http : // androidforums.com/introduction/218621-twitter4j-oauth-android-simple.html' 그들은 setIntent를 호출하지 않습니다. – CQM

+1

그래, 그들은 getIntent가 아닌 intent 인수를 사용합니다.) 방법. – Michael

+0

나는 그것을 간과했다! 고마워, 나는 이것에 많은 시간을 보냈다! – CQM

관련 문제