最近几个项目都是用ionic3开发的,遇到了好多坑,很多做原生APP的时候可以闭着眼睛都能解决的问题,现在感觉都是无解,还是功力不行,这次又遇到了一个问题,由第三方的APP想要调用我们做的ionic APP,还可能要传值过来,实现免登陆之类的需求,调用的话,问题倒是不大,第三方Android APP的话,通过设置要调用APP的包名、Activity和要传递的参数就可以了,没什么问题,原生的调用的基本方法:
//要调用另一个APP的包名
String packageName = "com.xxx.security";
//要调用另一个APP的activity名字
String activity = "com.xxx.security.MainActivity";
ComponentName component = new ComponentName(packageName, activity);
Intent intent = new Intent();
intent.setComponent(component);
intent.putExtra("userName", "张三");
intent.putExtra("passWord", "123456");
startActivity(intent);
然后,到了ionic这边,首先,我们需要通过ionic cordova platform add android的命令来创建Android平台,并且执行ionic cordova build android 。然后在platfroms/android/src/com/xxx/security下面找到MainActivity.java文件,这个就是ionic打包成Android后的起始页面,在platfroms/android/下的AndroidMainifest.xml文件中通过android.intent.category.LAUNCHER也能找到起始页是哪一个。和原生APP一样,获取外部参数,并把获取到参数,拼接到launchUrl后面,launchUrl通常为index.html,是在config.xml里面配置的。
public class MainActivity extends CordovaActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// enable Cordova apps to be started in the background
Bundle extras = getIntent().getExtras();
if (extras != null && extras.getBoolean("cdvStartInBackground", false)) {
moveTaskToBack(true);
}
String userName = extras.getString("userName");
String passWord = extras.getString("passWord");
// Set by <content src="index.html" /> in config.xml
if(passWord==null || userName==null)
{
loadUrl(launchUrl);
}
else
{
Toast.makeText(this, parm, Toast.LENGTH_LONG).show();
loadUrl(launchUrl+"?userName="+userName+"&passWord="+passWord);
}
}
}
到现在为止,其实还是顺利的,然后接下来,才疏学浅的我,怎么都不知道接下来该怎么做了,页面怎么获取参数?又怎么向后面实际要打开的页面去把这个参数传过去呢?这些参数传到哪里去了,哪里又会通过什么方法取出这些参数?我百度了差不多两天,都没有找到类似的贴子,全是ionic调用第三方,而不是第三方调用ionic,真的,一篇文章都没有,是不是我检索的方式有问题,心灰意冷。然后,突然,晚上做梦的时候,我想起了一个妙招。
在index.html中写script代码,首先在ionic项目根目录的src目录下下找到index.html文件,然后在里面敲如下代码:
<script>
var userName =GetRequest().userName;
var passWord =GetRequest().passWord;
if(passWord!=null || userName!=null)
{
window.localStorage.setItem('userName',userName);
window.localStorage.setItem('passWord',passWord);
}
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for(var i = 0; i < strs.length; i ++) {
theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);
}
}
return theRequest;
}
</script>
大家可以看到,我把获取到的参数通过localStorage存起来了,老子不传了,你们后面的页面,比如登陆页面,谁要用,自己去取吧,哈哈哈哈,是不是很暴力,但还真能解决问题啊,怎么存,存成什么样子,随便,希望能帮到大家。
当然,最后,还是觉得自己这是玩野路子,耍小聪明,不过我一直是野路子,希望哪位知道该怎么解决这个问题的朋友,能教教我,给我留个言,谢谢啦。