2013-08-05 81 views
4

我目前正在開發一個Android應用程序,通過HTML請求從服務器請求信息並獲取一個參數字符串作爲回報。在啓動過程中會發生這種情況,以便在首次運行應用程序時配置該應用程序。從瀏覽器重定向到Android應用程序

要將請求發送給我打電話,從我的應用程序的主要活動的onCreate方法如下服務器:

String URL = "http://myserver.mydomain.com/users/start";    
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(URL)); 
startActivity(browserIntent); 

的服務器,一個Rails應用程序,獲取所需的參數值,並重定向回該應用程序會與下面的語句:

redirect_to "http://myappname.mydomain.com/?#{mobile_params.to_query}" 

我在AndroidManifest.xml中創建的意圖過濾器對於該處理來自服務器返回的參數的活動。該意圖過濾器看起來像:

<activity 
     android:name=".StartFromUriActivity" 
     android:launchMode="singleTop" 
     android:noHistory="true" 
     android:screenOrientation="behind" 
     android:theme="@style/NoTitle" 
     android:exported="true" > 
     <intent-filter> 
      <data android:scheme="http" android:host="myappname.mydomain.com" /> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
     </intent-filter> 
    </activity> 

最後,我StartFromUriActivity.java的前幾行是這樣的:

public class StartFromUriActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Uri URIdata = getIntent().getData(); 
     if(URIdata != null) { 
      parameter1value = URIdata.getQueryParameter("param1"); 
     } 
    finish(); 
    } 
} 

的這一切實際工作很好,但有一個例外。該應用程序打開瀏覽器,將URI發送到服務器,該服務器使用所需的參數值重定向到應用程序,意圖過濾器指向該活動並正確讀取參數。唯一的問題是瀏覽器窗口留在前臺,我必須手動關閉它。我嘗試了所有我能想到的方法來讓我的應用程序來到前臺,並讓瀏覽器關閉或無法成功地進入後臺。我錯過了什麼會導致我的應用程序正確地被帶到前臺?

+0

我覺得android:allowTaskReparenting =「true」會處理這個嗎?我不完全確定,但android文檔談論你所描述的問題。 –

+0

謝謝dsschnau,這沒有解決問題,但它指出我在正確的方向 – Blaze

+0

太棒了!很高興我能幫上一點忙。 –

回答

5

我嘗試了dsschnau向AndroidManifest.xml中的activity添加android:allowTaskReparenting =「true」的建議。這並沒有解決問題,所以我嘗試添加android:parentActivityName =「。MainActivity」和android:taskAffinity =「myapp」,這樣重新制定了一個明確的目標,但仍然沒有運氣。

然後我意識到問題在於StartFromUriActivity.OnCreate中的finish()語句正在結束活動,並且它正確地返回到堆棧中的下一個活動,即瀏覽器。解決方法是在finish()語句之前添加以下行。

Intent intent = new Intent(this, MainActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
+0

你應該接受這個答案,如果它爲你工作。 – Samiron

相關問題