(注:本文只介绍代码实现重点部分。)

app下载地址

前几日去买彩票,在选号码时很是苦恼,分析数据吧,咱不会,蒙吧,肯定没戏。想了一想,为什么不做一个生成彩票号码的app呢?好,说干就干。

-----------------------------------------

安卓开发自己已经有了一定的基础。屡一下思路,也就是界面+简单算法(生成对应的随机数序列就可以了)。先给app起个响亮的名字吧,恩。。就叫“小石彩票助手”。

第一大步:开发

在eclipse中新建工程Lottery(彩票)

接着设计下主界面布局

既然是彩票助手,所以体彩和福彩所有彩种都得支持。(查阅对应官网,找到每种彩票玩法,开奖号是由几个数字组成等等。)

为什么有个”打赏小石“按钮呢?这个你懂得,不多做解释。

我们在layout文件夹下建立对应的布局文件。这里我采用listview来显示这些按钮。而这个listview其实只有一个item。因为为了适应不同的手机屏幕,做成只有一个item的listview可以直接对按钮进行滑动操作。

主界面布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/background"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><ListViewandroid:id="@+id/listView1"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"></ListView></RelativeLayout>

接着在MainActivity中对listview进行适配器绑定等操作。

// 获取listview控件ListView lv1 = (ListView) findViewById(R.id.listView1);// 绑定适配器lv1.setAdapter(new MyAdapter(this));
/*** ListView的适配器实现* * @author MR.Stone* */class MyAdapter extends BaseAdapter {LayoutInflater inflater;Context context;public MyAdapter(Context context) {this.context = context;}@Overridepublic int getCount() {// 为了适应不同机型,才将开始液面作为只有一个item的listviewreturn 1;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {inflater = LayoutInflater.from(context);// 加载布局文件convertView = inflater.inflate(R.layout.listitem, null);init(convertView);return convertView;}}

listitem.xml文件内容

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:orientation="vertical" ><Buttonandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/lanmubeijing"android:text="体彩" android:textSize="22dp"android:layout_gravity="center_horizontal"/><TableLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" ><TableRowandroid:id="@+id/tableRow1"android:layout_width="wrap_content"android:layout_height="wrap_content" ><ImageButtonandroid:id="@+id/bt_dlt"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/daletou" /><ImageButtonandroid:id="@+id/bt_qxc"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/qixingcai" /></TableRow><TableRowandroid:id="@+id/tableRow2"android:layout_width="wrap_content"android:layout_height="wrap_content" ><ImageButtonandroid:id="@+id/bt_pls"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/pailiesan" /><ImageButtonandroid:id="@+id/bt_plw"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/pailiewu" /></TableRow><TableRowandroid:id="@+id/tableRow3"android:layout_width="wrap_content"android:layout_height="wrap_content" ></TableRow></TableLayout><Buttonandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/lanmubeijing"android:text="福彩" android:textSize="22dp"android:layout_gravity="center_horizontal"/><TableLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" ><TableRowandroid:id="@+id/tableRow4"android:layout_width="wrap_content"android:layout_height="wrap_content" ><ImageButtonandroid:id="@+id/bt_ssq"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/shuangseqiu" android:layout_weight="1"/><ImageButtonandroid:id="@+id/bt_qlt"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/qilecai" android:layout_weight="1"/><ImageButtonandroid:id="@+id/bt_3d"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/sandi" android:layout_weight="1"/></TableRow><TableRowandroid:id="@+id/tableRow5"android:layout_width="wrap_content"android:layout_height="wrap_content" ></TableRow><TableRowandroid:id="@+id/tableRow6"android:layout_width="wrap_content"android:layout_height="wrap_content" ></TableRow><TableRowandroid:id="@+id/tableRow7"android:layout_width="wrap_content"android:layout_height="wrap_content" ></TableRow></TableLayout><Buttonandroid:id="@+id/bt_ds"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/lanmubeijing"android:text=">>打赏小石" android:textSize="22dp"android:layout_gravity="center_horizontal"/></LinearLayout>

接着创建OpenActivity继承activity。这是我们的摇奖界面。

在主界面点击按钮跳转至摇奖界面用到的代码

/*** 按钮点击相应事件*/@Overridepublic void onClick(View v) {String kind = "";switch (v.getId()) {case R.id.bt_ds:Intent intent = new Intent();intent.setClass(MainActivity.this, AwardActivity.class);//打赏小石界面startActivity(intent);return;case R.id.bt_dlt:kind = "大乐透";break;case R.id.bt_qxc:kind = "七星彩";break;case R.id.bt_pls:kind = "排列三";break;case R.id.bt_plw:kind = "排列五";break;case R.id.bt_ssq:kind = "双色球";break;case R.id.bt_qlt:kind = "七乐彩";break;case R.id.bt_3d:kind = "3D";break;}Intent intent = new Intent();intent.putExtra("kind", kind);intent.setClass(MainActivity.this, OpenActivity.class);startActivity(intent);}

这个界面要实现的功能是通过摇一摇手机,生成对应的购彩号码。这时我们新建一个工具类Generate

package com.utils;import java.util.LinkedList;
import java.util.Random;import com.xiaoshi.lottery.R;public class Generate {//根据彩票种类生成号码public static String getNum(String kind) {if (kind.equals("大乐透")) {//getResult生()成1-35中的5个数字return getResult(35, 5) + "+ " + getResult(12, 2);}if (kind.equals("七星彩")) {Random rand = new Random();String s = rand.nextInt(10) + " " + rand.nextInt(10) + " "+ rand.nextInt(10) + " " + rand.nextInt(10) + " "+ rand.nextInt(10) + " " + rand.nextInt(10) + " "+ rand.nextInt(10);return s;}if (kind.equals("排列三")) {Random rand = new Random();String s = rand.nextInt(10) + " " + rand.nextInt(10) + " "+ rand.nextInt(10);return s;}if (kind.equals("排列五")) {Random rand = new Random();String s = rand.nextInt(10) + " " + rand.nextInt(10) + " "+ rand.nextInt(10) + " " + rand.nextInt(10) + " "+ rand.nextInt(10) ;return s;}if (kind.equals("双色球")) {return getResult(33, 6) + "+ " + getResult(16, 1);}if (kind.equals("七乐彩")) {return getResult(30, 7);}if (kind.equals("3D")) {Random rand = new Random();String s = rand.nextInt(10) + " " + rand.nextInt(10) + " "+ rand.nextInt(10);return s;}return "发生错误";}public static int getKindId(String kind) {if (kind.equals("大乐透")) {return 1;}if (kind.equals("七星彩")) {return 1;}if (kind.equals("排列三")) {return 1;}if (kind.equals("排列五")) {return 1;}if (kind.equals("双色球")) {return 0;}if (kind.equals("七乐彩")) {return 0;}if (kind.equals("3D")) {return 0;}return 0;}static String getResult(int total, int nums) {// 用list来装载开奖号码LinkedList<Integer> listNum = new LinkedList<Integer>();for (int i = 0; i < total; i++) {listNum.add(i + 1);}// 用来生成随机数Random rand = new Random();String result = "";int k;for (int i = 0; i < nums; i++) {k = rand.nextInt(total);result += (listNum.get(k) > 9 ? (listNum.get(k) + ""): ("0" + listNum.get(k))) + " ";listNum.remove(k);total--;}return result;}
}

然后在OpenActivity实现摇一摇功能后调用getNum(kind)方法。

摇一摇实现功能

private void rock() {// 1获得硬件信息mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);// 2 判断当前手机是否带加速度感应器,如果不带,直接结束,不启动服务List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);if (sensors != null)if (sensors.size() == 0)return;// 3生成感应侦听事件sensorelistener = new SensorEventListener() {@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// TODO Auto-generated method stub}// 感应器发生改变@Overridepublic void onSensorChanged(SensorEvent event) {// TODO Auto-generated method stubint sensorType = event.sensor.getType();// 读取摇一摇敏感值int shakeSenseValue = 18;// values[0]:X轴,values[1]:Y轴,values[2]:Z轴float[] values = event.values;if (sensorType == Sensor.TYPE_ACCELEROMETER) {if ((Math.abs(values[0]) > shakeSenseValue|| Math.abs(values[1]) > shakeSenseValue || Math.abs(values[2]) > shakeSenseValue)) {// 触发事件,执行打开应用行为vibrator.vibrate(500);tvNum.setText(Generate.getNum(kind));}}}};// 4注册侦听事件mSensorManager.registerListener(sensorelistener,mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);}

这个界面中需要定义的成员变量

TextView tvKind;// 彩种文本
TextView tvChunyue;// 穿越文本
TextView tvNum;// 开奖号码
Button btn_web;// 查看开奖结果
Button btn_wx;// 分享好友
String kind;

再来就是需要查看开奖结果,这时我们新建WebResultActivity,点击按钮跳转到这个界面就可以了。其布局文件中用到一个WebView

package com.xiaoshi.lottery;import com.xiaoshi.lottery.R;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.webkit.WebView;public class WebResultActivity extends BaseActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);FullScreen();setContentView(R.layout.activity_web_result);int kindId = getIntent().getExtras().getInt("kind");WebView wv = (WebView) findViewById(R.id.webView1);// 设置WebView属性,能够执行Javascript脚本wv.getSettings().setJavaScriptEnabled(true);if (kindId == 1) {wv.loadUrl("http://www.lottery.gov.cn/");} else {wv.loadUrl("http://www.cwl.gov.cn/");}}}

这时1.0版本基本成型了。

第二大步:推广

如果你对自己的app比较自信,或者是同时想捞点辛苦费,这时您就可以考虑怎么推广自己的app,怎么通过app赚外快了。

这里我用到的一个简单的推广办法就是微信推广,朋友给朋友介绍的软件安装率应该才高么。

首先在微信开放平台申请账号、注册登录->创建自己的应用->填写相关信息->待审核通过后->你就可以获得该app对应的appkey等信息了。

实现代码时首先在manifest中添加对应的权限(有些多余的是为了后期加广告)

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.VIBRATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

然后在自己的工程中新建包    自己程序包名+wxapi ,在此包下新建类WXEntryActivity,名字必须是这个。导入对应jar包,WXEntryActivity内容

package com.xiaoshi.lottery.wxapi;import com.tencent.mm.sdk.modelbase.BaseReq;
import com.tencent.mm.sdk.modelbase.BaseResp;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.WXAPIFactory;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;public class WXEntryActivity extends Activity implements IWXAPIEventHandler {private IWXAPI api;@Overrideprotected void onCreate(Bundle savedInstanceState) {api = WXAPIFactory.createWXAPI(this, "wx****************caa", false);//第二个参数到时填自己的appkeyapi.handleIntent(getIntent(), this);super.onCreate(savedInstanceState);}@Overridepublic void onResp(BaseResp resp) {// LogManager.show("TAG", resp.errCode: + resp.errCode + ,resp.errStr: +// resp.errStr, 1);switch (resp.errCode) {case BaseResp.ErrCode.ERR_OK:// 分享成功Log.e("test", "成功");break;case BaseResp.ErrCode.ERR_USER_CANCEL:// 分享取消Log.e("test", "取消");break;case BaseResp.ErrCode.ERR_AUTH_DENIED:// 分享拒绝Log.e("test", "失败");break;}}@Overridepublic void onReq(BaseReq arg0) {// TODO 自动生成的方法存根}
}

我们在OpenActivity界面加入分享按钮,

Button btn_wx;// 分享好友
private IWXAPI wxApi;public static final String WX_APP_ID = "wx********************aa";// 微信分享// 实例化微信分享实例wxApi = WXAPIFactory.createWXAPI(this, WX_APP_ID);wxApi.registerApp(WX_APP_ID);// 分享好友btn_wx = (Button) findViewById(R.id.Button02);btn_wx.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {wechatShare(0);}});
//flag为0时分享给好友或群,flag为1时分享到朋友圈
private void wechatShare(int flag) {WXWebpageObject webpage = new WXWebpageObject();webpage.webpageUrl = "http://shouji.baidu.com/software/item?docid=8554193&from=as";WXMediaMessage msg = new WXMediaMessage(webpage);msg.title = "也没啥好礼物,就送你500万吧!";msg.description = tvKind.getText() + " "+ tvNum.getText() + " 。快去买吧,中了别忘了给我分点,呵呵!";// 这里替换一张自己工程里的图片资源Bitmap thumb = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);msg.setThumbImage(thumb);SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = String.valueOf(System.currentTimeMillis());req.message = msg;req.scene = flag == 0 ? SendMessageToWX.Req.WXSceneSession: SendMessageToWX.Req.WXSceneTimeline;wxApi.sendReq(req);Log.e("test", "send");}

至此分享功能已实现。

第三大步:广告

这里我拿百度应用来举例:首先在 百度应用开发者平台注册账号,上传自己应用。填写相关信息,等审核通过后。点击获取服务,在广告里添加广告位,会生成对应的广告id,自己应用id。

导入对应jar包,在自己的程序添加

private BDInterstitialAd appxInterstitialAdView;// 插屏广告Handler myHandler;
// 处理广告相应myHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case 1:appxInterstitialAdView.showAd();break;case 2:appxInterstitialAdView.loadAd();break;}}};
private void loadAd() {// 创建广告视图// 发布时请使用正确的ApiKey和广告位IDappxInterstitialAdView = new BDInterstitialAd(this,"ekYuWDotdIQnLGhQgPDf4Rb0oFwFHfze", "Nx0bOLRLSWkoF1oWYgTo46Lx");// 设置插屏广告行为监听器appxInterstitialAdView.setAdListener(new InterstitialAdListener() {String TAG = "ad";@Overridepublic void onAdvertisementDataDidLoadFailure() {Log.e(TAG, "load failure");}@Overridepublic void onAdvertisementDataDidLoadSuccess() {Log.e(TAG, "load success");}@Overridepublic void onAdvertisementViewDidClick() {Log.e(TAG, "on click");}@Overridepublic void onAdvertisementViewDidHide() {Log.e(TAG, "on hide");}@Overridepublic void onAdvertisementViewDidShow() {Log.e(TAG, "on show");}@Overridepublic void onAdvertisementViewWillStartNewIntent() {Log.e(TAG, "leave");}});// 加载广告appxInterstitialAdView.loadAd();new Thread(new Runnable() {@Overridepublic void run() {// 当广告未加载时一直执行while (true) {try {Thread.sleep(3000);// 展示插屏广告前先请先检查下广告是否加载完毕if (appxInterstitialAdView.isLoaded()) {Message msg = new Message();msg.what = 1;myHandler.sendMessage(msg);return;} else {Message msg = new Message();msg.what = 2;myHandler.sendMessage(msg);Log.i("ad", "AppX Interstitial Ad is not ready");}} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}).start();}

这时软件基本完成。

希望仓促完成的本文会对您有所启发,彩票助手app使用体验可以点击下面链接

app下载地址

一款彩票app的制作运营详解相关推荐

  1. 【Dash搭建可视化网站】项目10:疫情数据可视化大屏制作步骤详解

    疫情数据可视化大屏制作步骤详解 1 项目效果图 2 项目架构 3 文件介绍和功能完善 3.1 assets文件夹介绍 3.2 app.py和index.py文件完善 3.3 header.py文件完善 ...

  2. 短视频运营详解:抖音变现目前流行的是七种方式之一电商卖货

    短视频运营详解:抖音变现目前流行的是七种方式之电商卖货 抖音变现目前流行的是七种方式,电商卖货.广告营销.内容付费.品牌导流.直播变现.IP变现.社群营销. 我们分别来说一下:权威的三方报告提到过,抖 ...

  3. 【Dash搭建可视化网站】项目13:销售数据可视化大屏制作步骤详解

    销售数据可视化大屏制作步骤详解 1 项目效果图 2 项目架构 3 文件介绍和功能完善 3.1 assets文件夹介绍 3.2 app.py和index.py文件完善 3.3 header.py文件完善 ...

  4. 爬虫实战(二)—利用requests、selenium爬取王者官网、王者营地APP数据及pymongo详解

    概述 可关注微信订阅号 loak 查看实际效果. 代码已托管github,地址为:https://github.com/luozhengszj/LOLGokSpider ,包括了项目的所有代码. 本文 ...

  5. 【Dash搭建可视化网站】项目12:全球恐怖主义数据大屏制作步骤详解

    全球恐怖主义数据大屏制作步骤详解 1 项目效果图 2 项目架构 3 文件介绍和功能完善 3.1 assets文件夹介绍 3.2 app.py和index.py文件完善 3.3 header.py文件完 ...

  6. Android App优化之ANR详解

    引言 背景:Android App优化, 要怎么做? Android App优化之性能分析工具 Android App优化之提升你的App启动速度之理论基础 Android App优化之提升你的App ...

  7. 我的世界服务器如何做无限箱子,我的世界无限存储箱子制作教程详解

    我的世界无限存储箱子制作教程详解,详细描述了我的世界无限存储箱子制作教程,希望这篇我的世界无限存储箱子制作教程详解,能够帮助到各位正在玩我的世界的玩家朋友们! 我的世界无限存储箱子制作教程详解 各位土 ...

  8. mc服务器怎么修改浮空字,我的世界可点击的浮空字怎么做 可点击的浮空字制作方法详解...

    麦块我的世界盒子3.1.0.0 官方最新版 类型:游戏其他大小:7.1M语言:中文 评分:7.4 标签: 立即下载 我的世界可点击的浮空字怎么做?可点击的浮空字在游戏中可以说是非常好玩的一件事,玩家可 ...

  9. ucsd大学音乐计算机,音乐留学│综合名校UCSD音乐制作专业详解!

    原标题:音乐留学│综合名校UCSD音乐制作专业详解! 美国音乐制作院校推荐 今天给大家推荐的美国音乐制作留学的可选院校,是一所综合排名很高.学费相对较低(公立),且专业水平不错的院校:加利福尼亚大学圣 ...

最新文章

  1. 最新Java面试题答案
  2. 技术 | 苹果最新博文剑指汉字手写识别!专家回应:并没有技术含量
  3. 沈向洋,被微软“耽搁”的独角兽催化大师
  4. 一些或许用的到的小Demo
  5. [sql]sqlite3板子上安装运行报错
  6. 如何设计真正高性能高并发分布式系统(万字长文)
  7. TypeScript 入门
  8. iapp启动图代码_代码神器:拒绝重复编码,这款IDEA插件了解一下.....
  9. 基于.NET平台的分层架构实战(一)——综述
  10. 下载 Bootstrap3 的 Sass 版本
  11. cortex-m0 专为支持OS的四个功能设计
  12. JavaScript基础(三)
  13. 【雕刻机】安装破解Artcam2017
  14. 嵌入式linux ucgui,Helper2416开发板移植ucgui(嵌入式linux运行ucgui)
  15. 人工智能案例:车厂特斯拉的花式AI应用...
  16. 苹果3年提起215起商标异议申请,对菠萝也要争,被指“霸凌”
  17. 百度UEditor编辑器压缩(缩放)图片只压缩jpg格式的解决方法
  18. java queue toarray_Java PriorityBlockingQueue toArray()用法及代码示例
  19. Redisson分布式调度任务小栗子
  20. Cookie、Session、Token、JWT 看一篇就够了

热门文章

  1. 微信实名认证在哪里?分享详细认证步骤
  2. selenium 模拟登陆 古诗文网 含验证码
  3. HTTP 协议中 Vary
  4. 【CMake】cmake的add_custom_command和add_custom_target指令
  5. 你有没有过那种明知是对的但却没能去做的事?
  6. 【干货分享】IOS非越狱渠道运营必知的10条
  7. UE4学习监督——基本动画
  8. html-webpack-plugin 又出幺蛾子 | 一次解决bug的过程
  9. 谷粒商城-分布式基础篇2
  10. Verilog实现按键计数器