2013-05-03 114 views
3

这是我想要从用户授权我的应用程序的问题。 这个API提供了我的OAuth 2.0流程从浏览器获取重定向的URL - Android

我有一个包含我的应用程序键的链接“A”和我的重定向链接

如。当在浏览器中打开http://www.apiprovider?api-key=MY_API_KEY&redirect=REDIRECT_LINK

链路A询问用户的用户名和密码,并授权我的应用程序,成功授权后,用户会被重定向到REDIRECT_LINK

REDIRECT_LINK进行编码,这是我需要存储的关键在变量中

例如。 https://www.twitter.com/some_profilekey=Asc545AS454dS44as

我不想让用户访问重定向链接,我只是想获取网址,然后关闭浏览器的页面不应该打开

我已经使用这个代码在浏览器中

Intent httpIntent = new Intent(Intent.ACTION_VIEW); 
      httpIntent.setData(Uri.parse("LINK_A")); 
      startActivity(httpIntent); 
+0

不会在浏览器中打开它,使用的WebView。或者,制作一个HttpGet并检索Location-Redirect标题。 – njzk2 2013-05-03 07:49:54

+0

我无法使用HttpGet,因为在用户输入有效的用户名和密码后发生重定向,并且必须向用户显示页面(链接A)。它不能发生在后端。 – user1910290 2013-05-03 07:53:24

+0

好的。一个webview,然后。 – njzk2 2013-05-03 08:21:29

回答

1

打开链接:如果您打开的WebView您的网页,你的应用程序可以侦听与shouldOverrideUrlLoading()回调URL的任何变化。

如果你喜欢打开股票浏览器,你就可以开始,将定期轮询最新网址服务:当你发现url您的预期变化相匹配

String lastDate = "0"; 
… 
String newDate = Long.toString(Calendar.getInstance().getTimeInMillis()); 
Cursor cursor = context.getContentResolver().query(
    Browser.BOOKMARKS_URI, 
    Browser.HISTORY_PROJECTION, 
    Browser.BookmarkColumns.DATE + " IS NOT NULL AND " + Browser.BookmarkColumns.DATE + " > ?", 
    lastDate, 
    Browser.BookmarkColumns.DATE + " DESC"); 
if (cursor.moveToNext()) { 
    String url = cursor.getString(Browser.HISTORY_PROJECTION_URL_INDEX); 
} 
cursor.close(); 

lastDate = newDate; // update the timestamp 

,你可以切换到你的活动并继续在您的应用程序的上下文中。

从最终用户的POV中关闭浏览器是可能的,但它可能不礼貌。想象一下,例如,她有5个打开的标签,包含重要信息,所有这些都被销毁!

注意,此方法can be used为Chrome浏览器,具有略微不同的内容提供商:内容://com.android.chrome.browser/bookmarks