前言
這種功能在很多大型App上都有出現(xiàn)压鉴,像京東、QQ锻拘、淘寶都很容易發(fā)現(xiàn)油吭。外部瀏覽器調(diào)起App,App跳轉(zhuǎn)外部瀏覽器網(wǎng)頁(yè)署拟。不得不說(shuō)婉宰,這樣的操作就有很強(qiáng)的產(chǎn)品塑造性了。
具體實(shí)現(xiàn)
-
App跳轉(zhuǎn)外部瀏覽器網(wǎng)頁(yè)
這個(gè)實(shí)現(xiàn)很簡(jiǎn)單推穷,兩三行代碼的事情心包,不復(fù)雜!
1.獲取需要打開的uri
2.通過(guò)隱性intent喚起瀏覽器
Uri uri = Uri.parse("https://www.baidu.com"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);
-
外部瀏覽器調(diào)起App
這個(gè)實(shí)現(xiàn)要先來(lái)說(shuō)說(shuō)URI原理性知識(shí)馒铃。Android上的URI主要有三部分組成蟹腾,
scheme
,authority
和path
。其中authority
又分為host
和port
区宇,具體格式如下所示:scheme://host:port/path
舉個(gè)具體的例子:
假設(shè)這是我們用來(lái)調(diào)起App的網(wǎng)頁(yè)html代碼
<html> <meta charset="UTF-8"> <body> <h1>Test Scheme</h1> <!--自動(dòng)加載隱藏頁(yè)面跳轉(zhuǎn)--> <!--手動(dòng)點(diǎn)擊跳轉(zhuǎn)--> <a href="union://myunion:7380/ucar/user">點(diǎn)擊打開APP</a> </body> </html>
然后在App入口Activity(我這里是MainActivity)的注冊(cè)清單
AndroidManifest.xml
中配置intent-filter
娃殖,指定App要接收到的host
和scheme
,具體代碼如下:<activity android:name="com.uu.genauction.view.activity.MainActivity" android:screenOrientation="sensorPortrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <!-- 協(xié)議部分配置 ,要在web配置相同的--> <data android:host="myunion" android:scheme="union"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <action android:name="android.intent.action.VIEW"/> </intent-filter> </activity>
最后萧锉,當(dāng)我們點(diǎn)擊html的時(shí)候珊随,實(shí)際上就是打開URI
union://myunion:7380/ucar/user
。所以當(dāng)與App上事先配置的信息一致時(shí)柿隙,就能夠調(diào)起我們的App叶洞。另外,如果想把網(wǎng)頁(yè)的信息帶過(guò)去App的話禀崖,可以在URI中的path中添加參數(shù)衩辟,添加方式是
?key=value
。例如:union://myunion:7380/ucar/user?name=helloworld
然后App端接收傳過(guò)來(lái)的數(shù)據(jù)
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView= (TextView) findViewById(R.id.tv_main_show); Intent intent = getIntent(); Uri uri=intent.getData(); if(uri!=null){ String name=uri.getQueryParameter("name"); String scheme= uri.getScheme(); String host=uri.getHost(); String port=uri.getPort()+""; String path=uri.getPath(); String query=uri.getQuery(); mTextView.setText("獲得的數(shù)據(jù)name="+name+"/r"+"scheme"+scheme+"/r"+"host" + "host"+host+"/r"+"port"+port+"/r"+"path"+path+"/r"+"query"+query); } }