联通接入计费:
AndroidMinifast.xml
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.blogforlt.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 应用开发者ID cpId: -->
<meta-data
android:name="cpId"
android:value="cpid:XXXX" >
</meta-data>
<!-- 应用ID AppId: -->
<meta-data
android:name="AppId"
android:value="appid:XXXX" >
</meta-data>
<!-- 渠道伪码(线下渠道) -->
<meta-data android:name="fidsms"
android:value="fidsms:XXXXX" >
</meta-data>
</application>
<!--联网 等,必须加 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
MainActivity.java 需要支付的activity页面
findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Fiap fiap = new Fiap(MainActivity.this);
fiap.android_Pay(1);
}
});
Fiap.java 执行支付的逻辑代码
package com.example.blogforlt;
import com.multimode_billing_sms.ui.MultiModePay;
import com.multimode_billing_sms.ui.MultiModePay.SMSCallBack;
import android.app.Activity;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;
public class Fiap {
private Activity mActivity;
//计费点短代码
private String charge_Point;
//道具名称
private String itemID= "";
//道具金额
private int coin;
public Fiap(Activity activity){
mActivity = activity;
}
//index是三种计费点对应的标识
public void android_Pay(int index){
switch (index) {
case 0:
//激活游戏
//此处计费点填写移动平台申请的计费点的后三位作为计费点索引
charge_Point = "000";
itemID = "激活游戏";
coin = 6;
break;
case 1:
charge_Point = "001";
itemID = "购买200兑换币";
coin = 2;
break;
case 2:
charge_Point = "002";
itemID = "购买400兑换币";
coin = 3;
break;
default:
break;
}
fiapHandler.sendEmptyMessage(1);
}
Handler fiapHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
if (msg.what == 1) {
MultiModePay.getInstance().setEnableSend(true);// 调用SMS方法前必须调用
// 参数依次为:当前界面的Context,公司名字,电话号码,游戏名,道具名,道具金额(元),计费点,回调接口
MultiModePay.getInstance().sms(mActivity, "北京XXXXXX有限公司",
"010-XXXXXXXX", "XXX", itemID, String.valueOf(coin),
charge_Point, new MsgCallBack());
}
};
};
class MsgCallBack implements SMSCallBack {
@Override
public void ButtonCLick(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void SmsResult(int result, String arg1) {
// TODO Auto-generated method stub
if (result == MultiModePay.SUCCESS) {
// 支付成功的处理,直接执行支付成功后的逻辑,此处为了体现出支付成功弹了个Toast,正式使用时不要有任何提示
Toast.makeText(mActivity, "支付成功", Toast.LENGTH_LONG).show();
Log.i("cn.catcap.qhta", "联通方式支付成功。。。。");
} else if (result == MultiModePay.FAILD) {
Log.i("cn.catcap.qhta", "联通方式支付失败。。。。");
}
MultiModePay.getInstance().DismissProgressDialog(); // 取消进度条,此行必须有才能回到游戏界面
}
}
}
1.联通支付是不需要自己标识软硬计费点的,当平台申请计费点的时候会提交每个计费点是否允许重复支付(即软硬计费点),支付时我们只需要传入相应的计费点即可,平台会帮我们记录哪个是软计费点,哪个是硬计费点。
2.联通需将premessable.txt文件copy到工程assets目录下,用来配置渠道,每个渠道对应不同的渠道号,例如联通渠道号为:“00012243”。
3.游戏付费完成后直接结束付费,勿添加额外的提示信息,例如:Toast,AlertDialog等。
4.AndroidManifest.xml中正确配置应用开发者ID,应用ID,AppID,渠道伪码(线下渠道)后即可进行测试付费(0.01元)
电信 接入 付费
AndroidManifest.xml:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.blogfordx.MainActivity"
android:label="@string/app_name" >
</activity>
<!-- 电信 -->
<activity android:name="cn.game189.sms.SMS" android:theme="@android:style/Theme.Dialog" android:screenOrientation="portrait" ></activity>
<!-- 电信 -->
<!-- 启动闪屏界面 -->
<activity
android:name="com.example.blogfordx.EgameSplash"
android:configChanges="orientation"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<!-- 单机游戏不能有Internet等无关权限,若有特殊要求,平台申请时注明,审核通过后方可添加 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SEND_SMS" />
MainActivity.java
package com.example.blogfordx;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Fiap fiap = new Fiap(MainActivity.this);
fiap.android_Pay(1);
}
});
}
}
Fiap.java
package com.example.blogfordx;
import cn.game189.sms.SMS;
import cn.game189.sms.SMSListener;
import android.app.Activity;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;
public class Fiap {
private Activity mActivity;
// 是否允许重复计费
private boolean isRepeat;
// 计费点短代码
private String charge_Point;
// 道具名称
private String itemID = "";
// 支付金额
private int coin = 0;
public Fiap(Activity activity) {
mActivity = activity;
}
// index是三种计费点对应的标识
// 此处只有购买200兑换币是可支付的,正式使用时请填写自己的申请的计费点短代码
public void android_Pay(int index) {
switch (index) {
case 0:
// 激活游戏
isRepeat = false;
// 此处计费点填写电信平台申请的计费点的后三位作为计费点索引
charge_Point = "000";
itemID = "激活游戏";
coin = 4;
break;
case 1:
isRepeat = true;
charge_Point = "0211C001271102517996991102517990080115127000000000000000000000000000";
itemID = "购买200兑换币";
coin = 2;
break;
case 2:
isRepeat = true;
charge_Point = "002";
itemID = "购买400兑换币";
coin = 3;
break;
default:
break;
}
fiapHandler.sendEmptyMessage(1);
}
Handler fiapHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == 1) {
if (SMS.checkFee(itemID, mActivity, new SMSListener() {
public void smsOK(String feeName) {
// 短代发送成功,此处填写支付成功后的逻辑
Log.i("SMSListener", "模式" + feeName + "已计费完成,关卡已打开.");
Toast.makeText(mActivity, "支付成功", Toast.LENGTH_LONG)
.show();
}
public void smsFail(String feeName, int errorCode) {
// 短代发送失败,不给道具或不放行关卡
Log.e("SMSListener", "计费失败!模式:[" + feeName + "] 错误码:"
+ errorCode);
}
public void smsCancel(String feeName, int errorCode) {
Log.e("SMSListener", "用户点击取消!计费点:" + feeName + " 错误码:"
+ errorCode);
}
}, charge_Point, itemID + ",点击确定将会发送一条" + coin + "元短信,不含信息费.",
"短信已成功发送", isRepeat)) {
// 已计过费
}
}
};
};
}
移动接入计费:
AndroidManifest.xml:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.blogforyd.MainActivity"
android:label="@string/app_name" >
</activity>
<!-- 移动所需Activity注册 -->
<activity
android:name="cn.emagsoftware.gamebilling.activity.GameOpenActivity"
android:screenOrientation="sensor"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
//移动游戏基地需要启动游戏前先启动移动的闪屏界面,所以游戏主入口注册移到了这里
<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.CHINAMOBILE_OMS_GAME" />
<category android:name="android.intent.category.CHINAMOBILE_GAMES" />
</intent-filter>
</activity>
<!-- 移动所需Activity注册-->
</application>
<!-- 移动所需权限注册 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
注意:如果下边这行报错,clean一下项目就行了,可以无视
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS" >
</uses-permission>
<!-- 移动所需权限注册 -->
mAINaCTIVITY.JAVA
package com.example.blogforyd;
import cn.emagsoftware.gamebilling.api.GameInterface;
import cn.emagsoftware.gamebilling.api.GameInterface.GameExitCallback;
import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 调用初始化移动支付,否则无法启动支付界面(此方法最好放到启动游戏的时候调用)
GameInterface.initializeApp(this);
findViewById(R.id.button1).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Fiap fiap = new Fiap(MainActivity.this);
// 需要购买什么道具传进去相应的index,此处传0为激活游戏
fiap.android_Pay(0);
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
exit_game();
}
return super.onKeyDown(keyCode, event);
}
// 退出游戏
public void exit_game() {
GameInterface.exit(MainActivity.this, new GameExitCallback() {
@Override
public void onConfirmExit() {
System.exit(0);
}
@Override
public void onCancelExit() {
}
});
}
// 是否开启音效
public boolean is_open_music() {
return GameInterface.isMusicEnabled();
}
}
Fiap.java
//移动支付
//2013-04-28
package com.example.blogforyd;
import cn.emagsoftware.gamebilling.api.GameInterface;
import cn.emagsoftware.gamebilling.api.GameInterface.BillingCallback;
import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;
public class Fiap {
private Activity mActivity;
private boolean isRepeat;
private String charge_Point;
public Fiap(Activity activity){
mActivity = activity;
}
//index是三种计费点对应的标识
public void android_Pay(int index){
switch (index) {
case 0:
//激活游戏
isRepeat = false;
//此处计费点填写移动平台申请的计费点的后三位作为计费点索引
charge_Point = "000";
break;
case 1:
isRepeat = true;
charge_Point = "001";
break;
case 2:
isRepeat = true;
charge_Point = "002";
break;
case 3:
isRepeat = true;
charge_Point = "003";
break;
default:
break;
}
fiapHandler.sendEmptyMessage(1);
}
Handler fiapHandler = new Handler(){
public void handleMessage(Message msg) {
if (msg.what == 1) {
BillingCallback callBack = new BillingCallback() {
@Override
public void onBillingFail(String arg0) {
// TODO Auto-generated method stub
//此处表示支付失败
Log.i("result of pay", arg0);
}
@Override
public void onBillingSuccess(String arg0) {
// TODO Auto-generated method stub
//此处为支付成功逻辑
Toast.makeText(mActivity, "支付成功", Toast.LENGTH_LONG).show();
}
@Override
public void onUserOperCancel(String arg0) {
// TODO Auto-generated method stub
//此处表示用户取消支付
Log.i("result of pay", arg0);
}
};
//第一个参数为:触发计费接口的Context对象
//第二个参数为:选择采用短信计费还是联网计费(true为短信,false为联网)
//第三个参数为:计费点索引
//第四个参数为:支付结果回调
GameInterface.doBilling(mActivity, true, isRepeat, charge_Point,callBack);
}
};
};
}
AndroidMinifast.xml
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.blogforlt.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 应用开发者ID cpId: -->
<meta-data
android:name="cpId"
android:value="cpid:XXXX" >
</meta-data>
<!-- 应用ID AppId: -->
<meta-data
android:name="AppId"
android:value="appid:XXXX" >
</meta-data>
<!-- 渠道伪码(线下渠道) -->
<meta-data android:name="fidsms"
android:value="fidsms:XXXXX" >
</meta-data>
</application>
<!--联网 等,必须加 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
MainActivity.java 需要支付的activity页面
findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Fiap fiap = new Fiap(MainActivity.this);
fiap.android_Pay(1);
}
});
Fiap.java 执行支付的逻辑代码
package com.example.blogforlt;
import com.multimode_billing_sms.ui.MultiModePay;
import com.multimode_billing_sms.ui.MultiModePay.SMSCallBack;
import android.app.Activity;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;
public class Fiap {
private Activity mActivity;
//计费点短代码
private String charge_Point;
//道具名称
private String itemID= "";
//道具金额
private int coin;
public Fiap(Activity activity){
mActivity = activity;
}
//index是三种计费点对应的标识
public void android_Pay(int index){
switch (index) {
case 0:
//激活游戏
//此处计费点填写移动平台申请的计费点的后三位作为计费点索引
charge_Point = "000";
itemID = "激活游戏";
coin = 6;
break;
case 1:
charge_Point = "001";
itemID = "购买200兑换币";
coin = 2;
break;
case 2:
charge_Point = "002";
itemID = "购买400兑换币";
coin = 3;
break;
default:
break;
}
fiapHandler.sendEmptyMessage(1);
}
Handler fiapHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
if (msg.what == 1) {
MultiModePay.getInstance().setEnableSend(true);// 调用SMS方法前必须调用
// 参数依次为:当前界面的Context,公司名字,电话号码,游戏名,道具名,道具金额(元),计费点,回调接口
MultiModePay.getInstance().sms(mActivity, "北京XXXXXX有限公司",
"010-XXXXXXXX", "XXX", itemID, String.valueOf(coin),
charge_Point, new MsgCallBack());
}
};
};
class MsgCallBack implements SMSCallBack {
@Override
public void ButtonCLick(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void SmsResult(int result, String arg1) {
// TODO Auto-generated method stub
if (result == MultiModePay.SUCCESS) {
// 支付成功的处理,直接执行支付成功后的逻辑,此处为了体现出支付成功弹了个Toast,正式使用时不要有任何提示
Toast.makeText(mActivity, "支付成功", Toast.LENGTH_LONG).show();
Log.i("cn.catcap.qhta", "联通方式支付成功。。。。");
} else if (result == MultiModePay.FAILD) {
Log.i("cn.catcap.qhta", "联通方式支付失败。。。。");
}
MultiModePay.getInstance().DismissProgressDialog(); // 取消进度条,此行必须有才能回到游戏界面
}
}
}
1.联通支付是不需要自己标识软硬计费点的,当平台申请计费点的时候会提交每个计费点是否允许重复支付(即软硬计费点),支付时我们只需要传入相应的计费点即可,平台会帮我们记录哪个是软计费点,哪个是硬计费点。
2.联通需将premessable.txt文件copy到工程assets目录下,用来配置渠道,每个渠道对应不同的渠道号,例如联通渠道号为:“00012243”。
3.游戏付费完成后直接结束付费,勿添加额外的提示信息,例如:Toast,AlertDialog等。
4.AndroidManifest.xml中正确配置应用开发者ID,应用ID,AppID,渠道伪码(线下渠道)后即可进行测试付费(0.01元)
电信 接入 付费
AndroidManifest.xml:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.blogfordx.MainActivity"
android:label="@string/app_name" >
</activity>
<!-- 电信 -->
<activity android:name="cn.game189.sms.SMS" android:theme="@android:style/Theme.Dialog" android:screenOrientation="portrait" ></activity>
<!-- 电信 -->
<!-- 启动闪屏界面 -->
<activity
android:name="com.example.blogfordx.EgameSplash"
android:configChanges="orientation"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<!-- 单机游戏不能有Internet等无关权限,若有特殊要求,平台申请时注明,审核通过后方可添加 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SEND_SMS" />
MainActivity.java
package com.example.blogfordx;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Fiap fiap = new Fiap(MainActivity.this);
fiap.android_Pay(1);
}
});
}
}
Fiap.java
package com.example.blogfordx;
import cn.game189.sms.SMS;
import cn.game189.sms.SMSListener;
import android.app.Activity;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;
public class Fiap {
private Activity mActivity;
// 是否允许重复计费
private boolean isRepeat;
// 计费点短代码
private String charge_Point;
// 道具名称
private String itemID = "";
// 支付金额
private int coin = 0;
public Fiap(Activity activity) {
mActivity = activity;
}
// index是三种计费点对应的标识
// 此处只有购买200兑换币是可支付的,正式使用时请填写自己的申请的计费点短代码
public void android_Pay(int index) {
switch (index) {
case 0:
// 激活游戏
isRepeat = false;
// 此处计费点填写电信平台申请的计费点的后三位作为计费点索引
charge_Point = "000";
itemID = "激活游戏";
coin = 4;
break;
case 1:
isRepeat = true;
charge_Point = "0211C001271102517996991102517990080115127000000000000000000000000000";
itemID = "购买200兑换币";
coin = 2;
break;
case 2:
isRepeat = true;
charge_Point = "002";
itemID = "购买400兑换币";
coin = 3;
break;
default:
break;
}
fiapHandler.sendEmptyMessage(1);
}
Handler fiapHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == 1) {
if (SMS.checkFee(itemID, mActivity, new SMSListener() {
public void smsOK(String feeName) {
// 短代发送成功,此处填写支付成功后的逻辑
Log.i("SMSListener", "模式" + feeName + "已计费完成,关卡已打开.");
Toast.makeText(mActivity, "支付成功", Toast.LENGTH_LONG)
.show();
}
public void smsFail(String feeName, int errorCode) {
// 短代发送失败,不给道具或不放行关卡
Log.e("SMSListener", "计费失败!模式:[" + feeName + "] 错误码:"
+ errorCode);
}
public void smsCancel(String feeName, int errorCode) {
Log.e("SMSListener", "用户点击取消!计费点:" + feeName + " 错误码:"
+ errorCode);
}
}, charge_Point, itemID + ",点击确定将会发送一条" + coin + "元短信,不含信息费.",
"短信已成功发送", isRepeat)) {
// 已计过费
}
}
};
};
}
移动接入计费:
AndroidManifest.xml:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.blogforyd.MainActivity"
android:label="@string/app_name" >
</activity>
<!-- 移动所需Activity注册 -->
<activity
android:name="cn.emagsoftware.gamebilling.activity.GameOpenActivity"
android:screenOrientation="sensor"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
//移动游戏基地需要启动游戏前先启动移动的闪屏界面,所以游戏主入口注册移到了这里
<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.CHINAMOBILE_OMS_GAME" />
<category android:name="android.intent.category.CHINAMOBILE_GAMES" />
</intent-filter>
</activity>
<!-- 移动所需Activity注册-->
</application>
<!-- 移动所需权限注册 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
注意:如果下边这行报错,clean一下项目就行了,可以无视
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS" >
</uses-permission>
<!-- 移动所需权限注册 -->
mAINaCTIVITY.JAVA
package com.example.blogforyd;
import cn.emagsoftware.gamebilling.api.GameInterface;
import cn.emagsoftware.gamebilling.api.GameInterface.GameExitCallback;
import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 调用初始化移动支付,否则无法启动支付界面(此方法最好放到启动游戏的时候调用)
GameInterface.initializeApp(this);
findViewById(R.id.button1).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Fiap fiap = new Fiap(MainActivity.this);
// 需要购买什么道具传进去相应的index,此处传0为激活游戏
fiap.android_Pay(0);
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
exit_game();
}
return super.onKeyDown(keyCode, event);
}
// 退出游戏
public void exit_game() {
GameInterface.exit(MainActivity.this, new GameExitCallback() {
@Override
public void onConfirmExit() {
System.exit(0);
}
@Override
public void onCancelExit() {
}
});
}
// 是否开启音效
public boolean is_open_music() {
return GameInterface.isMusicEnabled();
}
}
Fiap.java
//移动支付
//2013-04-28
package com.example.blogforyd;
import cn.emagsoftware.gamebilling.api.GameInterface;
import cn.emagsoftware.gamebilling.api.GameInterface.BillingCallback;
import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;
public class Fiap {
private Activity mActivity;
private boolean isRepeat;
private String charge_Point;
public Fiap(Activity activity){
mActivity = activity;
}
//index是三种计费点对应的标识
public void android_Pay(int index){
switch (index) {
case 0:
//激活游戏
isRepeat = false;
//此处计费点填写移动平台申请的计费点的后三位作为计费点索引
charge_Point = "000";
break;
case 1:
isRepeat = true;
charge_Point = "001";
break;
case 2:
isRepeat = true;
charge_Point = "002";
break;
case 3:
isRepeat = true;
charge_Point = "003";
break;
default:
break;
}
fiapHandler.sendEmptyMessage(1);
}
Handler fiapHandler = new Handler(){
public void handleMessage(Message msg) {
if (msg.what == 1) {
BillingCallback callBack = new BillingCallback() {
@Override
public void onBillingFail(String arg0) {
// TODO Auto-generated method stub
//此处表示支付失败
Log.i("result of pay", arg0);
}
@Override
public void onBillingSuccess(String arg0) {
// TODO Auto-generated method stub
//此处为支付成功逻辑
Toast.makeText(mActivity, "支付成功", Toast.LENGTH_LONG).show();
}
@Override
public void onUserOperCancel(String arg0) {
// TODO Auto-generated method stub
//此处表示用户取消支付
Log.i("result of pay", arg0);
}
};
//第一个参数为:触发计费接口的Context对象
//第二个参数为:选择采用短信计费还是联网计费(true为短信,false为联网)
//第三个参数为:计费点索引
//第四个参数为:支付结果回调
GameInterface.doBilling(mActivity, true, isRepeat, charge_Point,callBack);
}
};
};
}