增加quick基本的资源和代码
@ -5,7 +5,7 @@ android {
|
||||
defaultConfig {
|
||||
applicationId "com.hnjc.wjtx.mi"
|
||||
minSdkVersion 18
|
||||
targetSdkVersion 28
|
||||
targetSdkVersion 26
|
||||
versionCode 1
|
||||
versionName "1.0.0"
|
||||
ndk {
|
||||
|
BIN
app/libs/android-support-v4.jar
Normal file
BIN
app/libs/armeabi-v7a/libqkcheck.so
Normal file
BIN
app/libs/quicksdk_v2.7.1_20200309.jar
Normal file
BIN
app/libs/x86/libqkcheck.so
Normal file
@ -10,8 +10,12 @@
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
|
||||
<uses-permission android:name="android.permission.GET_TASKS"/>
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
|
||||
|
||||
<application
|
||||
android:allowBackup="false"
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:name=".JCApplication"
|
||||
android:label="@string/app_name"
|
||||
@ -19,7 +23,7 @@
|
||||
android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" >
|
||||
|
||||
<meta-data android:name="android.max_aspect" android:value="2.2" />
|
||||
<activity android:name=".LaunchActivity"
|
||||
<activity android:name=".SplashActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:screenOrientation="portrait"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize|screenLayout"
|
||||
@ -31,6 +35,13 @@
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name=".LaunchActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:screenOrientation="portrait"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize|screenLayout"
|
||||
android:theme="@style/SplashTheme"
|
||||
>
|
||||
</activity>
|
||||
<activity android:name=".MainActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:screenOrientation="portrait"
|
||||
|
@ -1,9 +1,10 @@
|
||||
package com.hnjc.wjtx;
|
||||
|
||||
import android.app.Application;
|
||||
import android.util.Log;
|
||||
|
||||
public class JCApplication extends Application {
|
||||
import com.quicksdk.QuickSdkApplication;
|
||||
|
||||
public class JCApplication extends QuickSdkApplication {
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
|
@ -1,15 +1,20 @@
|
||||
package com.hnjc.wjtx;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.VibrationEffect;
|
||||
import android.os.Vibrator;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.widget.FrameLayout;
|
||||
@ -20,11 +25,24 @@ import com.hnjc.wjtx.util.AssetsUtil;
|
||||
import com.hnjc.wjtx.util.IdUtil;
|
||||
import com.hnjc.wjtx.util.StorageUtil;
|
||||
import com.hnjc.wjtx.util.StringUtil;
|
||||
import com.quicksdk.QuickSDK;
|
||||
import com.quicksdk.Sdk;
|
||||
import com.quicksdk.entity.GameRoleInfo;
|
||||
import com.quicksdk.entity.OrderInfo;
|
||||
import com.quicksdk.entity.UserInfo;
|
||||
import com.quicksdk.notifier.ExitNotifier;
|
||||
import com.quicksdk.notifier.InitNotifier;
|
||||
import com.quicksdk.notifier.LoginNotifier;
|
||||
import com.quicksdk.notifier.LogoutNotifier;
|
||||
import com.quicksdk.notifier.PayNotifier;
|
||||
import com.quicksdk.notifier.SwitchAccountNotifier;
|
||||
|
||||
import org.egret.egretnativeandroid.EgretNativeAndroid;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
//Android项目发布设置详见doc目录下的README_ANDROID.md
|
||||
|
||||
public class MainActivity extends Activity {
|
||||
@ -69,36 +87,95 @@ public class MainActivity extends Activity {
|
||||
rootLayout = nativeAndroid.getRootFrameLayout();
|
||||
showLoadingView();
|
||||
vibrator = (Vibrator) this.getSystemService(Context.VIBRATOR_SERVICE);
|
||||
}
|
||||
// 设置横竖屏,游戏横屏为true,游戏竖屏为false(必接)
|
||||
QuickSDK.getInstance().setIsLandScape(false);
|
||||
|
||||
// 生命周期接口调用(必接)
|
||||
|
||||
// 当targetVer大于23时 需要动态申请读写等权限 具体权限 具体而定
|
||||
try {
|
||||
// check权限
|
||||
if ((ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED)
|
||||
|| (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) {
|
||||
// 没有 , 申请权限 权限数组
|
||||
ActivityCompat.requestPermissions(MainActivity.this, new String[] { Manifest.permission.READ_PHONE_STATE,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE }, 1);
|
||||
} else {
|
||||
// 有 则执行初始化
|
||||
// 设置通知,用于监听初始化,登录,注销,支付及退出功能的返回值(必接)
|
||||
initQkNotifiers();
|
||||
// 请将下面语句中的第二与第三个参数,替换成QuickSDK后台申请的productCode和productKey值,目前的值仅作为示例
|
||||
Sdk.getInstance().init(this, "88049844578484520615487574815873", "82414864");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 异常 继续申请
|
||||
ActivityCompat.requestPermissions(MainActivity.this, new String[] { Manifest.permission.READ_PHONE_STATE,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE }, 1);
|
||||
}
|
||||
com.quicksdk.Sdk.getInstance().onCreate(this);
|
||||
}
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
com.quicksdk.Sdk.getInstance().onStart(this);
|
||||
}
|
||||
@Override
|
||||
protected void onRestart() {
|
||||
super.onRestart();
|
||||
com.quicksdk.Sdk.getInstance().onRestart(this);
|
||||
}
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
nativeAndroid.pause();
|
||||
com.quicksdk.Sdk.getInstance().onPause(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
nativeAndroid.resume();
|
||||
com.quicksdk.Sdk.getInstance().onResume(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
com.quicksdk.Sdk.getInstance().onStop(this);
|
||||
}
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
com.quicksdk.Sdk.getInstance().onDestroy(this);
|
||||
}
|
||||
@Override
|
||||
protected void onNewIntent(Intent intent) {
|
||||
super.onNewIntent(intent);
|
||||
com.quicksdk.Sdk.getInstance().onNewIntent(intent);
|
||||
}
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
com.quicksdk.Sdk.getInstance().onActivityResult(this, requestCode, resultCode, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(final int keyCode, final KeyEvent keyEvent) {
|
||||
if (keyCode == KeyEvent.KEYCODE_BACK) {
|
||||
//声明并初始化弹出对象
|
||||
AlertDialog.Builder builder=new AlertDialog.Builder(this);
|
||||
builder.setTitle("提示:");
|
||||
builder.setMessage("是否退出");
|
||||
//设置确认按钮
|
||||
builder.setNegativeButton("确定", (dialog, which) -> {
|
||||
nativeAndroid.exitGame();
|
||||
finish();//退出程序
|
||||
});
|
||||
//设置取消按钮
|
||||
builder.setPositiveButton("取消",null);
|
||||
//显示弹框
|
||||
builder.show();
|
||||
// //声明并初始化弹出对象
|
||||
// AlertDialog.Builder builder=new AlertDialog.Builder(this);
|
||||
// builder.setTitle("提示:");
|
||||
// builder.setMessage("是否退出");
|
||||
// //设置确认按钮
|
||||
// builder.setNegativeButton("确定", (dialog, which) -> {
|
||||
// nativeAndroid.exitGame();
|
||||
// finish();//退出程序
|
||||
// });
|
||||
// //设置取消按钮
|
||||
// builder.setPositiveButton("取消",null);
|
||||
// //显示弹框
|
||||
// builder.show();
|
||||
this.exit();
|
||||
return true;
|
||||
} else {
|
||||
return super.onKeyDown(keyCode, keyEvent);
|
||||
@ -233,11 +310,6 @@ public class MainActivity extends Activity {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
private void showLoadingView() {
|
||||
launchScreenImageView = new ImageView(this);
|
||||
launchScreenImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
||||
@ -266,4 +338,167 @@ public class MainActivity extends Activity {
|
||||
launchScreenImageView = null;
|
||||
}
|
||||
|
||||
//申请权限的回调(结果)
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
||||
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
//申请成功
|
||||
initQkNotifiers();
|
||||
Sdk.getInstance().init(this, "88049844578484520615487574815873", "82414864");
|
||||
} else {
|
||||
//失败 这里逻辑以游戏为准 这里只是模拟申请失败 退出游戏 cp方可改为继续申请 或者其他逻辑
|
||||
System.exit(0);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 支付
|
||||
*/
|
||||
private void pay() {
|
||||
GameRoleInfo roleInfo = new GameRoleInfo();
|
||||
roleInfo.setServerID("1");// 服务器ID,其值必须为数字字符串
|
||||
roleInfo.setServerName("火星服务器");// 服务器名称
|
||||
roleInfo.setGameRoleName("裁决之剑");// 角色名称
|
||||
roleInfo.setGameRoleID("1121121");// 角色ID
|
||||
roleInfo.setGameUserLevel("12");// 等级
|
||||
roleInfo.setVipLevel("Vip4");// VIP等级
|
||||
roleInfo.setGameBalance("5000");// 角色现有金额
|
||||
roleInfo.setPartyName("");// 公会名字
|
||||
|
||||
OrderInfo orderInfo = new OrderInfo();
|
||||
orderInfo.setCpOrderID(UUID.randomUUID().toString().replace("-", ""));// 游戏订单号
|
||||
orderInfo.setGoodsName("元宝");// 产品名称
|
||||
// orderInfo.setGoodsName("月卡");
|
||||
orderInfo.setCount(10);// 购买数量,如购买"10元宝"则传10
|
||||
// orderInfo.setCount(1);// 购买数量,如购买"月卡"则传1
|
||||
orderInfo.setAmount(10); // 总金额(单位为元)
|
||||
orderInfo.setGoodsID("101"); // 产品ID,用来识别购买的产品
|
||||
orderInfo.setExtrasParams("透传参数"); // 透传参数
|
||||
|
||||
com.quicksdk.Payment.getInstance().pay(MainActivity.this, orderInfo, roleInfo);
|
||||
}
|
||||
/**
|
||||
* 退出
|
||||
*/
|
||||
private void exit() {
|
||||
// 先判断渠道是否有退出框,如果有则直接调用quick的exit接口
|
||||
if (QuickSDK.getInstance().isShowExitDialog()) {
|
||||
Sdk.getInstance().exit(MainActivity.this);
|
||||
} else {
|
||||
// 游戏调用自身的退出对话框,点击确定后,调用quick的exit接口
|
||||
new AlertDialog.Builder(MainActivity.this).setTitle("退出").setMessage("是否退出游戏?").setPositiveButton("确定",
|
||||
(arg0, arg1) -> Sdk.getInstance().exit(MainActivity.this)).setNegativeButton("取消", null).show();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 设置通知,用于监听初始化,登录,注销,支付及退出功能的返回值
|
||||
*/
|
||||
private void initQkNotifiers() {
|
||||
QuickSDK.getInstance()
|
||||
// 1.设置初始化通知(必接)
|
||||
.setInitNotifier(new InitNotifier() {
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
Log.i(TAG, "初始化成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailed(String message, String trace) {
|
||||
Log.i(TAG, "初始化失败:" + message);
|
||||
}
|
||||
})
|
||||
// 2.设置登录通知(必接)
|
||||
.setLoginNotifier(new LoginNotifier() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(UserInfo userInfo) {
|
||||
if (userInfo != null) {
|
||||
Log.i(TAG, "登陆成功" + "\n\r" + "UserID: " + userInfo.getUID() + "\n\r" + "UserName: " + userInfo.getUserName() + "\n\r"
|
||||
+ "Token: " + userInfo.getToken());
|
||||
|
||||
// 登录成功之后,进入游戏时,需要向渠道提交用户信息
|
||||
// setUserInfo();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel() {
|
||||
Log.i(TAG, "取消登陆");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailed(final String message, String trace) {
|
||||
Log.i(TAG, "登陆失败:" + message);
|
||||
}
|
||||
|
||||
})
|
||||
// 3.设置注销通知(必接)
|
||||
.setLogoutNotifier(new LogoutNotifier() {
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
Log.i(TAG, "注销成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailed(String message, String trace) {
|
||||
Log.i(TAG, "注销失败:" + message);
|
||||
}
|
||||
})
|
||||
// 4.设置切换账号通知(必接)
|
||||
.setSwitchAccountNotifier(new SwitchAccountNotifier() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(UserInfo userInfo) {
|
||||
if (userInfo != null) {
|
||||
Log.i(TAG, "切换账号成功" + "\n\r" + "UserID: " + userInfo.getUID() + "\n\r" + "UserName: " + userInfo.getUserName() + "\n\r"
|
||||
+ "Token: " + userInfo.getToken());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailed(String message, String trace) {
|
||||
Log.i(TAG, "切换账号失败:" + message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel() {
|
||||
Log.i(TAG, "取消切换账号");
|
||||
}
|
||||
})
|
||||
// 5.设置支付通知(必接)
|
||||
.setPayNotifier(new PayNotifier() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(String sdkOrderID, String cpOrderID, String extrasParams) {
|
||||
Log.i(TAG, "支付成功,sdkOrderID:" + sdkOrderID + ",cpOrderID:" + cpOrderID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel(String cpOrderID) {
|
||||
Log.i(TAG, "支付取消,cpOrderID:" + cpOrderID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailed(String cpOrderID, String message, String trace) {
|
||||
Log.i(TAG, "支付失败:" + "pay failed,cpOrderID:" + cpOrderID + ",message:" + message);
|
||||
}
|
||||
})
|
||||
// 6.设置退出通知(必接)
|
||||
.setExitNotifier(new ExitNotifier() {
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
// 进行游戏本身的退出操作,下面的finish()只是示例
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailed(String message, String trace) {
|
||||
Log.i(TAG, "退出失败:" + message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
20
app/src/main/java/com/hnjc/wjtx/SplashActivity.java
Normal file
@ -0,0 +1,20 @@
|
||||
package com.hnjc.wjtx;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
|
||||
import com.quicksdk.QuickSdkSplashActivity;
|
||||
|
||||
public class SplashActivity extends QuickSdkSplashActivity {
|
||||
@Override
|
||||
public int getBackgroundColor() {
|
||||
return Color.WHITE;
|
||||
}
|
||||
@Override
|
||||
public void onSplashStop() {
|
||||
//闪屏结束后,跳转到游戏界面
|
||||
Intent intent = new Intent(this, LaunchActivity.class);
|
||||
startActivity(intent);
|
||||
this.finish();
|
||||
}
|
||||
}
|
30
app/src/main/res/drawable/qk_game_loading.xml
Normal file
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:oneshot="false" >
|
||||
|
||||
<item
|
||||
android:drawable="@drawable/qk_game_load01"
|
||||
android:duration="50"/>
|
||||
<item
|
||||
android:drawable="@drawable/qk_game_load02"
|
||||
android:duration="50"/>
|
||||
<item
|
||||
android:drawable="@drawable/qk_game_load03"
|
||||
android:duration="50"/>
|
||||
<item
|
||||
android:drawable="@drawable/qk_game_load04"
|
||||
android:duration="50"/>
|
||||
<item
|
||||
android:drawable="@drawable/qk_game_load05"
|
||||
android:duration="50"/>
|
||||
<item
|
||||
android:drawable="@drawable/qk_game_load06"
|
||||
android:duration="50"/>
|
||||
<item
|
||||
android:drawable="@drawable/qk_game_load07"
|
||||
android:duration="50"/>
|
||||
<item
|
||||
android:drawable="@drawable/qk_game_load08"
|
||||
android:duration="50"/>
|
||||
|
||||
</animation-list>
|
14
app/src/main/res/layout/qk_game_view_loading.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/qk_img_loading"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/qk_game_loading" />
|
||||
|
||||
</LinearLayout>
|
BIN
app/src/main/res/mipmap-hdpi/qk_game_load01.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/main/res/mipmap-hdpi/qk_game_load02.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/main/res/mipmap-hdpi/qk_game_load03.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/main/res/mipmap-hdpi/qk_game_load04.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
app/src/main/res/mipmap-hdpi/qk_game_load05.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/main/res/mipmap-hdpi/qk_game_load06.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/main/res/mipmap-hdpi/qk_game_load07.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/main/res/mipmap-hdpi/qk_game_load08.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
app/src/main/res/mipmap-hdpi/qk_game_loadbg.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
15
app/src/main/res/values/qk_game_style.xml
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<!-- 自定义loading dialog -->
|
||||
<style name="qk_game_style_loading" parent="android:style/Theme.Dialog">
|
||||
<item name="android:windowFrame">@null</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<item name="android:windowBackground">@drawable/qk_game_loadbg</item>
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
</resources>
|
@ -17,5 +17,4 @@ org.gradle.jvmargs=-Xmx1536m
|
||||
# org.gradle.parallel=true
|
||||
|
||||
android.injected.testOnly=false
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|