您的位置:首页 > 移动开发

手机浏览器打开手机上某个APP及注意事项

2016-07-22 11:04 417 查看
最近项目用有个需求:在手机浏览器上看自己公司的一个网页,看到某个专家,想要订阅他,就点击下面的订阅按钮,然后在弹窗中显示一个“在APP中打开”按钮。点击,打开APP,进入订阅界面。完成在APP中支付、订阅的功能。

在网上有不少类似的博客,我照着写了,但是因为一些细节,调整了一整天。这里,我把我发现的需要注意的细节,做一下总结:

1、自己定义一个假链接:之所以称为假链接,是因为这是自己随便写的,放在网上搜不出任何东西,但是,这个缺可以打开你的手机APP。比如,要买一个专家,你需要3个必须的参数:产品ID、专家的ID、专家的昵称。

这个时候,就自定义这个假链接为:

chen://com.haha/test?ProductID=111&NickName=aa&UserID=222


这个就是根据参数来随便写的。但是有几点要注意

(1)、前面的chen,是scheme,APP的清单文件要用。并且,要全小写。我试过,如果里面出现了大写字符,最后不会打开APP(之前不知道这点,调了一下午)

(2)、com.haha,是host

(3)、/test是pathPrefix

其中:host和pathPrefix不是必须的。清单中可以不配置

2、把这个链接给了写后台的人。让他们把这个假链接,加到打开APP的按钮上

3、在要打开的APP的清单文件中做配置(第二个intent-filter)

<intent-filter>
<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

<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:host="com.haha"
android:scheme="chen"
/>
</intent-filter>


注:1、配置的scheme,必须必须必须和你写的假链接的前面一样,不然,打不开,因为找不到你的APP;

2、第二个intent-filter,可以配置在任何activity中,我这里是写在了启动页中。但是要注意,不要和启动页的intent-filter合并在一起,必须分开写

4、这里和上面分开写,这里就涉及到获取数据注意的地方了:

在配置了上面第二个的activity中:

Intent form_web_intent = getIntent();
String action = form_web_intent.getAction();
if (Intent.ACTION_VIEW.equals(action)) {
Uri uri = form_web_intent.getData();
if (uri != null) {
String  ProductID= uri.getQueryParameter("ProductID");
String name = uri.getQueryParameter("NickName");
String userId=uri.getQueryParameter("UserID");
}
}


这里需要注意的是:一般都是在onCreat或者onResume方法中获取,但是要注意getIntent(),只会获取一份。只要这个activity不销毁,就会一直用之前get到的。比如:刚刚启动APP,getIntent()肯定是null。这个时候,home键退到后台,在网页上打开app,能打开,但是数据为null,这是因为,用的是上一个。再比如:清理缓存杀死程序,浏览器上打开app,传过来A专家的数据,然后home键退到后台,换个专家,APP启动以后,发现数据还是A专家的。所以,要打开的activity,最好是会用完就销毁的,首选启动页。这样,在启动页getIntent()得到数据,设成全局变量,然后在其他界面用。用完了,立刻置空。这样,可以避免再次进入的时候又一次判断等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: