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

最近项目用有个需求:在手机浏览器上看自己公司的一个网页,看到某个专家,想要订阅他,就点击下面的订阅按钮,然后在弹窗中显示一个“在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()得到数据,设成全局变量,然后在其他界面用。用完了,立刻置空。这样,可以避免再次进入的时候又一次判断等等。

展开阅读全文

没有更多推荐了,返回首页