通常我们可能会通过其他的应用打开需要打开的应用。以前考虑到可以用ANE来解决这个问题。但是其实AIR自身是提供这个功能的。不仅仅可以通过AIR打开其他的APP 还可以通过其他APP打开自身 以及通过网页链接打开自己。

通过ANE来打开如 安卓


//如果配置了不显示air前缀 那么就不需要加

String appPackage = "air.com.xx.myapp";
String appID = "air.com.xx.myapp.AppEntry";

Intent myIntent = new Intent();

myIntent.addCategory(Intent.CATEGORY_LAUNCHER);
myIntent.setAction(Intent.ACTION_MAIN);
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
myIntent.setData(Uri.parse("name=xmk&psd=123"));
myIntent.setClassName(appPackage, appID);
MainActivity.this.startActivity(myIntent);

对于AIR打开其他的APP 以及网页链接打开自己 就需要配置一下了

安卓:


<application>
<activity>
<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.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>

<!--myapp是自定义的字符串-->
<data android:scheme="myapp"/>
</intent-filter>
</activity>
</application>

上面的两个Itent 必须加上 本打算精简一下 然而打包的时候 会报错

另外不需要配置也能打开的 点击这里

苹果:


<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>

<!--和安卓一样myapp是自定义的字符串-->
<string>myapp</string>
</array>
<key>CFBundleURLName</key>

<!--此处的就是我们填写在ID标签里面的东西 不需要加上air前缀-->
<string>com.xx.myapp</string>
</dict>
</array>

通过上面的方式配置好后就可以写代码了

不带参数 air内 as3实现。

navigateToURL( new URLRequest("myapp://"));

网页实现

<a href="myapp://">打开app</a>

可以看出 只要使用能够打开url的api 就可以实现这种功能了。

带参数

navigateToURL( new URLRequest("myapp://name=xm&psd=123"));

即在//后面添加的字符串 就是我们传递给app的参数,比如点击网页直接打开app登录。
但是问题来了,air怎样能够获取到参数呢? 不卖关子,同样adobe提供了方法
监听事件InvokeEvent.INVOKE

private function onGetOtherAppInfoHandler( e:InvokeEvent ):void
{
   trace( e.arguments );//此处的arguments就是包含了我们传过来的参数 name=xm&psd=123 同时还有其他的数据。
}
NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE,onGetOtherAppInfoHandler );

注:上述获取参数的方式同样适合于通过原生的方式打开并传参

 

 

 

 

 

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注