手机浏览器打开手机上某个APP及注意事项
2016-07-22 11:04
417 查看
最近项目用有个需求:在手机浏览器上看自己公司的一个网页,看到某个专家,想要订阅他,就点击下面的订阅按钮,然后在弹窗中显示一个“在APP中打开”按钮。点击,打开APP,进入订阅界面。完成在APP中支付、订阅的功能。
在网上有不少类似的博客,我照着写了,但是因为一些细节,调整了一整天。这里,我把我发现的需要注意的细节,做一下总结:
1、自己定义一个假链接:之所以称为假链接,是因为这是自己随便写的,放在网上搜不出任何东西,但是,这个缺可以打开你的手机APP。比如,要买一个专家,你需要3个必须的参数:产品ID、专家的ID、专家的昵称。
这个时候,就自定义这个假链接为:
这个就是根据参数来随便写的。但是有几点要注意
(1)、前面的chen,是scheme,APP的清单文件要用。并且,要全小写。我试过,如果里面出现了大写字符,最后不会打开APP(之前不知道这点,调了一下午)
(2)、com.haha,是host
(3)、/test是pathPrefix
其中:host和pathPrefix不是必须的。清单中可以不配置
2、把这个链接给了写后台的人。让他们把这个假链接,加到打开APP的按钮上
3、在要打开的APP的清单文件中做配置(第二个intent-filter)
注:1、配置的scheme,必须必须必须和你写的假链接的前面一样,不然,打不开,因为找不到你的APP;
2、第二个intent-filter,可以配置在任何activity中,我这里是写在了启动页中。但是要注意,不要和启动页的intent-filter合并在一起,必须分开写
4、这里和上面分开写,这里就涉及到获取数据注意的地方了:
在配置了上面第二个的activity中:
这里需要注意的是:一般都是在onCreat或者onResume方法中获取,但是要注意getIntent(),只会获取一份。只要这个activity不销毁,就会一直用之前get到的。比如:刚刚启动APP,getIntent()肯定是null。这个时候,home键退到后台,在网页上打开app,能打开,但是数据为null,这是因为,用的是上一个。再比如:清理缓存杀死程序,浏览器上打开app,传过来A专家的数据,然后home键退到后台,换个专家,APP启动以后,发现数据还是A专家的。所以,要打开的activity,最好是会用完就销毁的,首选启动页。这样,在启动页getIntent()得到数据,设成全局变量,然后在其他界面用。用完了,立刻置空。这样,可以避免再次进入的时候又一次判断等等。
在网上有不少类似的博客,我照着写了,但是因为一些细节,调整了一整天。这里,我把我发现的需要注意的细节,做一下总结:
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()得到数据,设成全局变量,然后在其他界面用。用完了,立刻置空。这样,可以避免再次进入的时候又一次判断等等。
相关文章推荐
- (ios)UIScrollView和UIPageControl来实现app的欢迎界面
- JavaScript结合Bootstrap仿微信后台多图文界面管理
- Swift UITextField各种属性的设置
- Android中application取值为空
- 关于调用Android系统分享
- Android使用webview时,webview中的轮播图显示不正常
- 【腾讯Bugly干货分享】微信读书iOS性能优化
- Android动画--属性动画--基础
- app.use()方法
- ios tableview 自动计算cell高度
- Android内存泄漏的八种可能
- Android studio远程主机强迫关闭了一个现有的连接(夜神模拟器)
- iOS 直接使用16进制颜色
- Trapping Rain Water
- Objective-C-UI控件学习之UICollectionViewFlowLayout
- Caused by: java.lang.ClassNotFoundException[android的终极解决错误]
- swift - UIAlertView 的用法
- Swift 动画片段
- 微信红包算法-php代码
- Android-transulcent-status-bar总结