[Air For Android]Direct渲染模式与调用第三方插件BUG(已解决)

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 给银联的时候  银联把我的activity挂到后台了  但是我GPU渲染模式的游戏 不能挂到后台
详细参见:传送门

解决办法:

传入一个新的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>

《[Air For Android]Direct渲染模式与调用第三方插件BUG(已解决)》有13个想法

  1. 我也遇到同样的问题~ QQ 511129114 我用一个activity去跳转,返回时还是黑屏

  2. 我下载了你的adt重新打包还是有黑屏问题,我试用了一种方法,在游戏跳转充值界面的时候finish游戏的Activity,在充值界面重写finish方法,重新startActivity启动游戏 第一次的时候解决了黑屏,但是退出游戏后,再进行充值操作时又会黑屏,但是我进入“APP setting”清空所以数据,再次进入游戏充值不黑屏了,于是我猜想可否进入游戏时对数据进行清理,然后我试了一下,在第三方平台SDK初始化的时候清空 data/data/app(除了shared_prefs)结果还是会有黑屏。。。。

  3. 你好,我做接入碰到一个奇怪的问题,就是登录的时候,登陆成功,从登陆界面切回游戏的时候,游戏界面显示黑屏,但是我们不是每次碰到,而且大多时候等待一会儿,游戏界面又会显示出来,不知道博主你是否碰到过,不知道这个是什么问题?如果是gpu加速模式的问题,那为什么不是每次,而且等待一会儿有会好了?

    谢谢

  4. 你好!这个问题在AIR3.9出来后是不是自动解决了呢?貌似3.9里面有这样一个功能:AIR现在支持了iOS和Android设备在渲染模式设置为”direct”时,在后台执行代码。不知道老兄能不能帮忙测试一下这个问题,这样以后就不用这么这趟解决这些问题了,谢谢!另外,老兄公司的游戏叫什么名字,我想下载下来看一下。我的QQ是414112523,我也是做AIR手游的,希望能和你有进一步的沟通!

  5. 您好,我在做ane的时候也遇到了问题。as调用java call的时候也能调用。在call里面调用第三方库接口的时候就一直调用不到。不知道什么原因,我的qq 489385352 能否帮我看一下

发表评论

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