BUG重现环境:
1.应用开启GPU渲染模式 既是在XML中加入参数:<renderMode>direct</renderMode>
一般starling或者其他stage3D环境都必须开启此渲染模式;
2.应用调用第三方插件 例如支付宝插件 银联插件(我使用的是ANE调用)
描述:
在运行应用的时候 调用ANE 调用支付宝或者银联插件付费。付费完成或者付费取消 返回AIR环境的时候 引发;
现象:
手机黑屏 在退出到桌面再进去AIR应用的时候 恢复正常。
图片解释过程:
A。这里调用第三方插件 银联
B。点击确定呼出插件
C.现在直接退出插件。则手机屏幕显示黑屏 BUG引发
目前的解决思路:
A.在调用插件之前 使AIR退出焦点,进入后台运行。ANE中编写一个函数 监控插件是否关闭 关闭后呼出AIR程序界面
B.在调用插件之前 改变渲染模式(显然 这个目前根本没希望实现) 在插件关闭后再改回来
C.把第三方插件集合到ANE里面 让插件成为AIR的一部分(可行 但是要考虑RES ASSETS等布局文件 资源文件的问题 目前大多都是这样做的 但是不同的平台编写的插件调用代码很不规范 )
D.改变渲染模式(显然不可能 因为Stage3D对Direct模式 是硬性要求)
综上 目前我只能在 A 或者C 之间看看是否有解决办法 目前只想到那么多。
目前知道的引发原因:
解决办法:
传入一个新的activity
具体编码:
在ANE入口处:调用函数激活一个ACTIVIEY
public FREObject call(final FREContext context, FREObject[] $args) { // TODO Auto-generated method stub FREObject result = null; _context = context; Intent intent = new Intent(PayActivity.MYACTIVITY_ACTION); _context.getActivity().startActivityForResult(intent, 0); }[/cc] 然后新建的activity: [cc lang="java"] package com.qlwx.xmsh.cmge; import java.util.Timer; import java.util.TimerTask; import cn.sdk.SDKManager; import android.app.Activity; import android.app.Instrumentation.ActivityResult; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.content.Intent; public class PayActivity extends Activity implements OnClickListener { //声明开启Activity的Action 字符串需要与-app.xml对应 public static final String MYACTIVITY_ACTION = "com.qlwx.xmsh.cmge.PayActivity"; private String TAG = "PayAactivity"; public static String ServerID ; public static String Name ; public static String rId ; public static String Role ; public static String callBackInfo ; public static Activity callBackActivity ; private SDKManager SDKManager; private LinearLayout layout; private Button submitReturn; private Button submitPay; private static Boolean isExit = false; private Timer mTimer; private TimerTask mTimerTask; private Handler mHandler; protected static final int UPDATE_TEXT = 0; @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case 1: Log.d(TAG, "---------退出-------"); PayActivity.this.finish(); break; case 3: SDKManager.showPaymentView(ServerID, Name, rId, Role, callBackInfo); break; } } protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub //构建界面 super.onCreate(savedInstanceState); if(isExit) { } else { Log.d(TAG, "---------在这里调用JAR 执行付费-------"); SDKManager = SDKManager.getInstance(this); layout = new LinearLayout(this); this.setContentView(layout); submitReturn = new Button(this); submitReturn.setText("RETURN"); submitReturn.setId(1); layout.addView(submitReturn); this.setContentView(layout); //添加事件侦听 submitPay = new Button(this); submitPay.setText("PAY"); submitPay.setId(3); layout.addView(submitPay); //添加事件侦听 submitReturn.setOnClickListener(this); submitPay.setOnClickListener(this); // isExit = true; } } }
这样就实现了~
最后记得在APP-XML中加入ACTIVITY声明
<activity android:name=”com.qlwx.xmsh.cmge.ortherActivity”
android:launchMode=”singleTask” android:excludeFromRecents=”true”
android:screenOrientation=”landscape” android:configChanges=”keyboardHidden|orientation”
android:theme=”@android:style/Theme.Light.NoTitleBar.Fullscreen”>
<intent-filter>
<action android:name=”com.qlwx.xmsh.cmge.payActivity” />
<category android:name=”android.intent.category.DEFAULT” />
</intent-filter>
</activity>
大哥 我想问你一下 支付宝 for ANE的问题
我也遇到同样的问题~ QQ 511129114 我用一个activity去跳转,返回时还是黑屏
@wukangjian 请下载我修改的adt工具,放到你AIRSDK相应目录,再打包一次试试。地址
请问是什么问题呢?@顾超
我下载了你的adt重新打包还是有黑屏问题,我试用了一种方法,在游戏跳转充值界面的时候finish游戏的Activity,在充值界面重写finish方法,重新startActivity启动游戏 第一次的时候解决了黑屏,但是退出游戏后,再进行充值操作时又会黑屏,但是我进入“APP setting”清空所以数据,再次进入游戏充值不黑屏了,于是我猜想可否进入游戏时对数据进行清理,然后我试了一下,在第三方平台SDK初始化的时候清空 data/data/app(除了shared_prefs)结果还是会有黑屏。。。。
有email吗?发到我qqmail吧 511129114@qq.com交流一下
建议在ane中新建一个activity传给SDK(具体做法在本篇教程中),更具体的例子参考我小米ane源码的做法 https://github.com/platformanes/androidXiaomi @wukangjian
E_MAIL:rectvv[at]gmail[dot]com @wukangjian
你好,我做接入碰到一个奇怪的问题,就是登录的时候,登陆成功,从登陆界面切回游戏的时候,游戏界面显示黑屏,但是我们不是每次碰到,而且大多时候等待一会儿,游戏界面又会显示出来,不知道博主你是否碰到过,不知道这个是什么问题?如果是gpu加速模式的问题,那为什么不是每次,而且等待一会儿有会好了?
谢谢
检查SDK的launchMode是否和游戏主activity的launchMode有什么冲突的地方。@moto2002
你好!这个问题在AIR3.9出来后是不是自动解决了呢?貌似3.9里面有这样一个功能:AIR现在支持了iOS和Android设备在渲染模式设置为”direct”时,在后台执行代码。不知道老兄能不能帮忙测试一下这个问题,这样以后就不用这么这趟解决这些问题了,谢谢!另外,老兄公司的游戏叫什么名字,我想下载下来看一下。我的QQ是414112523,我也是做AIR手游的,希望能和你有进一步的沟通!
您好,我在做ane的时候也遇到了问题。as调用java call的时候也能调用。在call里面调用第三方库接口的时候就一直调用不到。不知道什么原因,我的qq 489385352 能否帮我看一下