上篇博文跟大家一起走了一遍支付宝支付,今天我们来看看移动支付。众所周知目前付费通道的龙头老大还要当属三大运营商(移动、联通、电信)。运营商接入代码相对简单,但琐碎的要求太多,涉及到启动界面、桌面图标、主界面、退出界面等。移动游戏基地后台地址:http://g.10086.cn/
部分截图
好了,继续贴代码:
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
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); } }; }; }
至此移动计费接入就完成了