短信鏈接跳轉(zhuǎn)瀏覽器,間接打開APP
- 平時(shí)我們會(huì)收到廣告短信豪直,比如某東劣摇,某寶,里面附加著鏈接弓乙,當(dāng)你點(diǎn)開鏈接(手機(jī)自帶的瀏覽器),發(fā)現(xiàn)瀏覽器打開后末融,等一下下钧惧,就會(huì)打開對(duì)應(yīng)的APP,直接到廣告相應(yīng)的頁面勾习。
Android端的代碼
- 從簡(jiǎn)單的開始浓瞪,第一個(gè)啟動(dòng)的Activity先來處理
<activity android:name=".activity.ActivityFirst">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- 不可以把上面,桌面啟動(dòng)圖標(biāo)的intent-filter巧婶,跟下面短信打開App的intent-filter寫一起乾颁,否者沒有桌面圖標(biāo)-->
<!-- 在啟動(dòng)的activity加入以下代碼,其中scheme很重要艺栈,短信啟動(dòng)App的標(biāo)識(shí)吧 -->
<intent-filter>
<data android:scheme="baozi" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
2.HTML代碼,關(guān)鍵就是href英岭,就是之前Android啟動(dòng)intent-filter的 “ [scheme的內(nèi)容]” + “ :” 這個(gè)冒號(hào)不能少
<!DOCTYPE html>
<html>
<head>
<title>Android短信測(cè)試</title>
</head>
<body>
<a href="baozi:">啟動(dòng)程序</a>
</body>
</html>
3.測(cè)試一下,能不能啟動(dòng)App湿右,我們沒有服務(wù)器的情況下巴席,可以把這段HTML代碼拷貝到手機(jī)里,點(diǎn)擊選擇品牌自帶瀏覽器啟動(dòng)就可以啦诅需。
基本啟動(dòng)功能.gif
最基本的功能實(shí)現(xiàn)啦,然后我再傳遞參數(shù)谦铃,打開指定的頁面轩拨。
1.HTML的跳轉(zhuǎn)鏈接里面添加參數(shù)
<a href=" scheme的內(nèi)容 :// host的內(nèi)容疼电?傳遞參數(shù)的key=傳遞參數(shù)的value">隨意什么內(nèi)容...</a>
<a href="baozi://bao.cn?type=red&url=111&name=紅色">啟動(dòng)紅色程序</a>
<a href="baozi://bao.cn?type=yellow&name=黃色">啟動(dòng)黃色色程序,url空</a>
<a href="baozi://bao.cn?type=green&url=333">啟動(dòng)綠色程序,name空</a>
scheme:?jiǎn)?dòng)的App的標(biāo)識(shí)场刑,相當(dāng)于協(xié)議吧。
host:域名蚪战,不重要牵现。
query:傳給app參數(shù)的Key和Value 。
2.Android代碼,在第一啟動(dòng)頁加入下面代碼
public static final String TYPE_INTENT = "type";
public static final String URL_INTENT = "url";
public static final String NAME_INTENT = "name";
if (intent.getData() != null)
{
Uri uri = intent.getData();
uri.getScheme();//獲取scheme
uri.getHost();//獲取host
uri.getAuthority();//獲取authority
String type = uri.getQueryParameter(TYPE_INTENT);//獲取傳遞參數(shù)
String url = uri.getQueryParameter(URL_INTENT);
String name = uri.getQueryParameter(NAME_INTENT);
//標(biāo)題轉(zhuǎn)UTF-8碼
if (!TextUtils.isEmpty(name))
{
try
{
name = URLDecoder.decode(name, "UTF-8");
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
}
參數(shù)可以傳空的邀桑,如果是中文要轉(zhuǎn)碼瞎疼,斷點(diǎn)看看參數(shù)
TIM截圖20180313124847.jpg
3.測(cè)試。
參數(shù)跳轉(zhuǎn).gif
4.總結(jié)壁畸,短信跳轉(zhuǎn)App難度不大贼急,就是基本用原生或者chrome內(nèi)核的瀏覽器,支持跳轉(zhuǎn)捏萍,其他瀏覽器兼容問題會(huì)有太抓。
5.代碼不多,就直接放出來令杈。
ActivityFirst代碼
public class ActivityFirst extends AppCompatActivity
{
public static final String TYPE_INTENT = "type";
public static final String URL_INTENT = "url";
public static final String NAME_INTENT = "name";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.first_activity);
//如果是從網(wǎng)址打開的
Intent intent = getIntent();
if (intent.getData() != null)
{
Uri uri = intent.getData();
uri.getScheme();//獲取scheme
uri.getHost();//獲取host
uri.getAuthority();//獲取authority
String type = uri.getQueryParameter(TYPE_INTENT);
String url = uri.getQueryParameter(URL_INTENT);
String name = uri.getQueryParameter(NAME_INTENT);
//標(biāo)題轉(zhuǎn)UTF-8碼
if (!TextUtils.isEmpty(name))
{
try
{
name = URLDecoder.decode(name, "UTF-8");
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
//獲取到的參數(shù)跳轉(zhuǎn)
Intent intentStart = new Intent(this,ActivityMain.class);
intentStart.putExtra(TYPE_INTENT,type);
intentStart.putExtra(URL_INTENT,url);
intentStart.putExtra(NAME_INTENT,name);
startActivity(intentStart);
finish();
}
}
}
HTML代碼
<!DOCTYPE html>
<html>
<head>
<title>Android短信測(cè)試</title>
</head>
<body>
<a href="baozi://bao.cn?type=red&url=111&name=紅色">啟動(dòng)紅色程序</a>
<br>
<a href="baozi://bao.cn?type=yellow&name=黃色">啟動(dòng)黃色色程序,url空</a>
<br>
<a href="baozi://bao.cn?type=green&url=333">啟動(dòng)綠色程序走敌,name空</a>
</body>
</html>
Manifest代碼最上面有了