手机程序开发

article/2025/9/15 16:19:05

如今手机已成为大众的交流工具。有关手机的程序开发越来越广泛,本节通过几个典型实例介绍如何利用短信猫发送、接收短信、远程控制计算机、业务员销售数据采集和短信息娱乐互动平台。

实例431 利用短信猫收发短信息

实例说明

短信猫是利用SIM卡发送短信的硬件设备,通过串口或USB接口(根据设备型号而定)与计算机相连。在程序中可以利用短信猫发送或接收短信。本例实现了利用短信猫收发短信息的功能。实例运行结果如图13.15所示。

文本框:
图13.15  利用短信猫收发短信息
技术要点

本例使用的是北京人大金仓信息技术有限公司的串口短信猫。在购买短信猫时会附带包括SDK的开发包,其中提供了操作短信猫的函数(封装在dllforvc.dll动态库中)。下面介绍操作短信猫的主要函数。

(1)GSMModemGetSnInfoNew函数

该函数获取短信猫注册需要的信息,代码如下:

    [DllImport("dllforvc.dll",

         EntryPoint = "GSMModemGetSnInfoNew",

         CharSet = CharSet.Ansi,

         CallingConvention = CallingConvention.StdCall)]

    public static extern string GSMModemGetSnInfoNew(string device, string baudrate);

参数说明如下。

l     device:通信端口,为null时系统会自动检测。

l     baudrate:通讯波特率,为null时系统会自动检测。

(2)GSMModemGetDevice函数

该函数获取当前的通讯端口,代码如下:

    [DllImport("dllforvc.dll",

         EntryPoint = "GSMModemGetDevice",

         CharSet = CharSet.Ansi,

         CallingConvention = CallingConvention.StdCall)]

    public static extern string GSMModemGetDevice();

(3)GSMModemGetBaudrate函数

该函数获取当前的通讯波特率,代码如下:

    [DllImport("dllforvc.dll",

         EntryPoint = "GSMModemGetBaudrate",

         CharSet = CharSet.Ansi,

         CallingConvention = CallingConvention.StdCall)]

    public static extern string GSMModemGetBaudrate();

(4)GSMModemInitNew函数

该函数用于初始化短信猫。语法如下:

    [DllImport("dllforvc.dll",

         EntryPoint = "GSMModemInitNew",

         CharSet = CharSet.Ansi,

         CallingConvention = CallingConvention.StdCall)]

    public static extern bool GSMModemInitNew(

        string device,

        string baudrate,

        string initstring,

        string charset,

        bool swHandshake,

        string sn);

参数说明如下。

l     device:标识通信端口,如果为NULL,系统会自动检测。

l     baudrate:标识通讯波特率,如果为NULL,系统会自动检测。

l     initstring:标识初始化命令,为NULL即可。

l     charset:标识通讯字符集,为NULL即可。

l     swHandshake:标识是否进行软件握手,为False即可。

l     sn:标识短信猫的授权号,需要根据实际情况填写。

(5)GSMModemSMSsend函数

该函数用于发送手机短信。语法如下:

    [DllImport("dllforvc.dll",

         EntryPoint = "GSMModemSMSsend",

         CharSet = CharSet.Ansi,

         CallingConvention = CallingConvention.StdCall)]

    public static extern bool GSMModemSMSsend(

        string serviceCenterAddress,

        int encodeval,

        string text,

        int textlen,

        string phonenumber,

        bool requestStatusReport);

参数说明如下。

l     serviceCenterAddress:标识短信中心号码,为NULL即可。

l     encodeval:标识短信息编码格式,如果为8,表示中文短信编码。

l     text:标识短信内容。

l     textlen:标识短信内容的长度。

l     phonenumber:标识接收短信的电话号码。

l     requestStatusReport:标识状态报告。

(6)GSMModemSMSReadAll函数

该函数取得所有短信息,包括SIM卡和手机中的短信息。返回的短信内容格式为电话号码1|短信内容1||电话号码2|短信内容2||:

    //接收短信息返回字符串格式为:手机号码|短信内容||手机号码|短信内容||

    //RD_opt为1表示接收短信息后不做任何处理,为0表示接收后删除信息

    [DllImport("dllforvc.dll",

         EntryPoint = "GSMModemSMSReadAll",

         CharSet = CharSet.Ansi,

         CallingConvention = CallingConvention.StdCall)]

    public static extern string GSMModemSMSReadAll(int RD_opt);

参数说明如下。

l     RD_opt:对读取后的短信息进行处理,0表示删除,1表示不做处理。

实现过程

(1)新建一个项目,命名为Ex13_14,默认窗体为Form1。

(2)在Form1窗体中,主要添加TextBox控件和Label控件,控件的数量及用途如图13.15所示,添加两个Button控件,分别用于发送短信息和接收短信息。

(3)主要程序代码。

将所使用的函数封装在GMS类中。代码如下:

class GMS

{

    //初始化gsm modem,并连接gsm modem

    [DllImport("dllforvc.dll",

         EntryPoint = "GSMModemInitNew",

         CharSet = CharSet.Ansi,

         CallingConvention = CallingConvention.StdCall)]

    public static extern bool GSMModemInitNew(

        string device,

        string baudrate,

        string initstring,

        string charset,

        bool swHandshake,

        string sn);

    //获取短信猫新的标识号码

    [DllImport("dllforvc.dll",

         EntryPoint = "GSMModemGetSnInfoNew",

         CharSet = CharSet.Ansi,

         CallingConvention = CallingConvention.StdCall)]

    public static extern string GSMModemGetSnInfoNew(string device, string baudrate);

    //获取当前通讯端口

    [DllImport("dllforvc.dll",

         EntryPoint = "GSMModemGetDevice",

         CharSet = CharSet.Ansi,

         CallingConvention = CallingConvention.StdCall)]

    public static extern string GSMModemGetDevice();

    //获取当前通讯波特率

    [DllImport("dllforvc.dll",

         EntryPoint = "GSMModemGetBaudrate",

         CharSet = CharSet.Ansi,

         CallingConvention = CallingConvention.StdCall)]

    public static extern string GSMModemGetBaudrate();

    //断开连接并释放内存空间       

    [DllImport("dllforvc.dll",

         EntryPoint = "GSMModemRelease",

         CharSet = CharSet.Ansi,

         CallingConvention = CallingConvention.StdCall)]

    public static extern void GSMModemRelease();

    //取得错误信息   

    [DllImport("dllforvc.dll",

         EntryPoint = "GSMModemGetErrorMsg",

         CharSet = CharSet.Ansi,

         CallingConvention = CallingConvention.StdCall)]

    public static extern string GSMModemGetErrorMsg();

    //发送短信息

    [DllImport("dllforvc.dll",

         EntryPoint = "GSMModemSMSsend",

         CharSet = CharSet.Ansi,

         CallingConvention = CallingConvention.StdCall)]

    public static extern bool GSMModemSMSsend(

        string serviceCenterAddress,

        int encodeval,

        string text,

        int textlen,

        string phonenumber,

        bool requestStatusReport);

    //接收短信息返回字符串格式为:手机号码|短信内容||手机号码|短信内容||

    //RD_opt为1接收短信息后不做任何处理,0为接收后删除信息

    [DllImport("dllforvc.dll",

         EntryPoint = "GSMModemSMSReadAll",

         CharSet = CharSet.Ansi,

         CallingConvention = CallingConvention.StdCall)]

    public static extern string GSMModemSMSReadAll(int RD_opt);

}

在装载Form1窗体时,获取设备信息。代码如下:

        private void Form1_Load(object sender, EventArgs e)

        {

            //机器号码,当参数为空时,函数自动获取设备信息

            txtJQHM.Text = GMS.GSMModemGetSnInfoNew(txtCOM.Text, txtBTL.Text);

            txtCOM.Text = GMS.GSMModemGetDevice();  //COM1

            txtBTL.Text= GMS.GSMModemGetBaudrate();  //波特率

        }

发送短信息。代码如下:

        private void btnSend_Click(object sender, EventArgs e)

        {

               if(txtSJHM.Text == "")

               {

           MessageBox.Show("手机号码不能为空!","提示", MessageBoxButtons.OK);

                   txtSJHM.Focus();

                   return;

               }

               if(txtContent.Text=="")

               {

           MessageBox.Show("短信内容不能为空!", "提示", MessageBoxButtons.OK);

                   txtContent.Focus();

                   return;

               }

               //连接设备

               if(GMS.GSMModemInitNew(txtCOM.Text, txtBTL.Text, null, null, false, txtPower.Text)==false)

               {

                   MessageBox.Show("设备连接失败!" + GMS.GSMModemGetErrorMsg(),"提示", MessageBoxButtons.OK);

                   return;

               }

               // 发送短信

               if (GMS.GSMModemSMSsend(null, 8, txtContent.Text, Encoding.Default.GetByteCount(txtContent.Text),txtSJHM.Text, false) == true)

                   MessageBox.Show("短信发送成功!", "提示", MessageBoxButtons.OK);

               else

                   MessageBox.Show("短信发送失败!" + GMS.GSMModemGetErrorMsg(), "提示", MessageBoxButtons.OK);

        }

接收短信息。代码如下:

        private void btnResvice_Click(object sender, EventArgs e)

        {

            //1)连接设备

            if (GMS.GSMModemInitNew(txtCOM.Text, txtBTL.Text, null, null, false, txtPower.Text) == false)

            {

                MessageBox.Show("连接失败!" + GMS.GSMModemGetErrorMsg(), "提示", MessageBoxButtons.OK);

                return;

            }

            //2)接收短信

            txtContent.Text = GMS.GSMModemSMSReadAll(1);

            txtSJHM.Text = txtContent.Text.Substring(0, 13);

            txtContent.Text = txtContent.Text.Substring(13, txtContent.Text.Length-13);

        }

举一反三

根据本实例,读者可以开发以下程序。

*  利用短信猫群发短信。

*  办公自动化系统,办公短信通知、短信日程提醒、应急信息短信发布和短信审批等。

实例432 利用短信远程关闭计算机

实例说明

本例实现了利用短信远程关闭计算机的功能。运行程序,首先,进行关机信息设置;然后,开启服务;最后,通过手机向短信猫发送“关机”数据。片刻之后,指定的计算机将会自动关机。程序如图13.16所示。

文本框:
图13.16  利用短信远程关闭计算机
技术要点

相关函数请参见实例“利用短信猫收发短信息”中的技术要点。

实现过程

(1)新建一个项目,命名为Ex13_15,默认窗体为Form1。

(2)在Form1窗体中,主要添加TextBox控件和Label控件,控件的数量及用途如图13.16所示,添加一个Button控件,用于开启或停止远程关闭计算机服务。

(3)主要程序代码。

        private void Form1_Load(object sender, EventArgs e)

        {

           //机器号码

            txtJQHM.Text = GMS.GSMModemGetSnInfoNew(txtCOM.Text, txtBTL.Text); 

            txtCOM.Text = GMS.GSMModemGetDevice();  //COM1

            txtBTL.Text = GMS.GSMModemGetBaudrate();  //波特率

            labStatus.Text = "服务关闭中。。。。。";

        }

        private void Close_Windows()

        {

            try

            {

                //指定生成 WMI 连接所需的所有设置

                ConnectionOptions op = new ConnectionOptions();

                op.Username = txtUser.Text;  //远程计算机用户名称

                op.Password = txtPWD.Text;   //远程计算机用户密码

                //设置操作管理范围

         ManagementScope scope = new ManagementScope("" + txtIP.Text + "//root//cimv2", op);

                scope.Connect();  //将此 ManagementScope 连接到实际的 WMI 范围。

                ObjectQuery oq = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");

             ManagementObjectSearcher query = new ManagementObjectSearcher(scope, oq);

                //得到WMI控制

                ManagementObjectCollection queryCollection = query.Get();

                foreach (ManagementObject obj in queryCollection)

                {

                  obj.InvokeMethod("ShutDown", null); //执行关闭远程计算机

                }

            }

            catch(Exception ex)

            {

                Process p = new Process();

                p.StartInfo.FileName = "cmd.exe";

                p.StartInfo.UseShellExecute = false;

                p.StartInfo.RedirectStandardInput = true;

                p.StartInfo.RedirectStandardOutput = true;

                p.StartInfo.RedirectStandardError = true;

                p.StartInfo.CreateNoWindow = true;

                p.Start();

                p.StandardInput.WriteLine("shutdown /s");

                p.StandardInput.WriteLine("exit");

            }

        }

        private void timer1_Tick(object sender, EventArgs e)

        {

            //连接设备

            if (GMS.GSMModemInitNew(txtCOM.Text, txtBTL.Text, null, null, false, txtPower.Text) == false)

            {

                MessageBox.Show("连接失败!" + GMS.GSMModemGetErrorMsg(), "提示", MessageBoxButtons.OK);

                return;

            }

            //接收短信

            string str = GMS.GSMModemSMSReadAll(1);

            if (str==null)

                return;

            if (str.Substring(str.IndexOf("|")+1, 2) == "关机")

            {

                this.Close_Windows();

            }

        }

        private void button1_Click(object sender, EventArgs e)

        {

            if (button1.Text == "开启服务")

            {

                timer1.Enabled = true;

                labStatus.Text = "关机命令采集中。。。。。";

                button1.Text = "停止服务";

            }

            else

            {

                timer1.Enabled = false;

                button1.Text = "开启服务";

                labStatus.Text = "服务关闭中。。。。。";

            }

        }

举一反三

根据本实例,读者可以实现以下功能。

*  利用短信实现客户资料查询。

*  保险行业中:保单查询、续费提醒、客户生日提醒和保费计算等。

实例433 短信息采集烟草销售数据

实例说明

在各类销售行业中,产品销售数据量是企业不可缺少的一项数据。当销售人员在外地出差并且在没有计算机的情况下,如何及时的将销售数据汇报到公司中呢?

本例实现利用短信息采集烟草销售数据的功能。销售人员根据规定的格式编辑短信发送到短信息猫中即可。运行程序,单击【烟草销售信息采集】按钮采集烟草销售数据,然后单击【统计】按钮,将销售数据整理出来。如图13.17所示。

技术要点

相关函数请参见实例“利用短信猫收发短信息”中的技术要点。

另外,程序规定的编辑短信息格式为,以冒号“:”分隔并结束。例如“张三:业务员:12:长春:3400:”。其中,主要使用String.Split( )方法将信息数据拆分。

图13.17  短信息采集烟草销售数据

String.Split( )方法:返回包含此实例中的子字符串(由指定 Char 数组的元素分隔)的 String 数组。

语法:

public string[] Split (

    params char[] separator

)

参数说明如下。

l     separator:分隔此实例中子字符串的 Unicode 字符数组,不包含分隔符的空数组或空引用。

l     返回值:一个数组,其元素包含此实例中的子字符串,这些子字符串由 separator 中的一个或多个字符分隔。

实现过程

(1)新建一个项目,命名为Ex13_16,默认窗体为Form1。

(2)在Form1窗体中,主要添加TextBox控件和Label控件,控件的数量及用途如图13.17所示,添加3个Button控件,分别用于发送短信息、采集销售数据和整理采集数据,添加两个DataGridView表格,分别用于显示短信息内容和整理后的销售数据。

(3)主要程序代码。

单击【烟草销售信息采集】按钮,接受短信息并保存到数据库中。代码如下:

          private void btnResvice_Click(object sender, EventArgs e)

        {

            //连接设备

            if (GMS.GSMModemInitNew(txtCOM.Text, txtBTL.Text, null, null, false, txtPower.Text) == false)

            {

                MessageBox.Show("连接失败!" + GMS.GSMModemGetErrorMsg(), "提示", MessageBoxButtons.OK);

                return;

            }

            //接收短信

            string content = GMS.GSMModemSMSReadAll(0);

            if (content ==null)

            {

                this.getMessage();

                return;

            }

            content= content.Replace("||", "|"); // 替换||为|

            string[] str_sp = content.Split('|');// 进行分离

            int k=0;

            dataGridView1.ColumnCount = 2;

            dataGridView1.RowCount = str_sp.Length / 2;

            dataGridView1.Columns[0].HeaderText = "手机号码";

            dataGridView1.Columns[1].HeaderText = "短信息";

            for (int i = 0; i < str_sp.Length / 2; i++)

            {

                for (int j = 0; j < 2; j++)

                {

                    dataGridView1[j, i].Value = str_sp[k];

                    if (k % 2 != 0)

                        this.InsertMessage("insert into RecivedBox (Mobile,Content,reciveTime)values('" + Convert.ToString(dataGridView1[0, i].Value) + "','" + Convert.ToString(dataGridView1[1, i].Value) + "','" + DateTime.Now.ToString() + "') ");

                    k++;

                }

            }

            this.getMessage();

        }

自定义方法getSplitMessage()用来拆分短信息并且整理为正规数据。代码如下:

        private void getSplitMessage()

        {

            string content = "";

            for (int i = 0; i < dataGridView1.Rows.Count; i++)

            {

                content = content + Convert.ToString(dataGridView1["短信息", i].Value);

            }

            string[] str_sp = content.Split(':');// 进行分离

            int k = 0;

            dataGridView2.ColumnCount = 5;

            dataGridView2.RowCount = str_sp.Length/5 ;

            dataGridView2.Columns[0].HeaderText = "姓名";

            dataGridView2.Columns[1].HeaderText = "职务";

            dataGridView2.Columns[2].HeaderText = "月份";

            dataGridView2.Columns[3].HeaderText = "销售地区";

            dataGridView2.Columns[4].HeaderText = "销售数量";

            for (int i = 0; i < str_sp.Length / 5; i++)

            {

                for (int j = 0; j < 5; j++)

                {

                    dataGridView2[j, i].Value = str_sp[k];

                    k++;

                }

            }

        }

自定义InsertMessage()方法,将接受的短信息保存到数据库中。代码如下:

        private void InsertMessage(string strSql)

        {

            //将短信息内容添加到数据库中

            OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + "message.mdb" + ";Persist Security Info=False");

            con.Open();

            OleDbCommand cmd = new OleDbCommand(strSql, con);

            cmd.ExecuteNonQuery();

            con.Close();

        }

自定义getMessage()方法,获取数据库中所有的短信息数据。代码如下:

        private void getMessage()

        {

            OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + "message.mdb" + ";Persist Security Info=False");

            OleDbDataAdapter dap = new OleDbDataAdapter("select mobile as 手机号码,content as 短信息,reciveTime as 日期 from RecivedBox", con);

            DataSet ds = new DataSet();

            dap.Fill(ds);

            dataGridView1.DataSource = ds.Tables[0].DefaultView;

        }

调用自定义getSplitMessage()方法,将整理后的销售数据显示在DataGridView表格中。代码如下:

        private void btnFind_Click(object sender, EventArgs e)

        {

            if(dataGridView1.Rows.Count>0)

            this.getSplitMessage();

        }

举一反三

根据本实例,读者可以实现以下功能。

*  利用短信实现销售业绩查询。

*  利用短信实现订购商品。

实例434 “春晚”节目评比短信息互动平台

实例说明

在观看娱乐电视节目中,主持人经常带动场外的电视观众参与到活动当中。例如,在春节联欢晚会中,通过编辑短信来选取观众最喜欢的春晚节目,那么本实例将实现为“春晚”节目评比的短信息互动平台。电视观众根据规定的格式编辑短信发送到短信息互动平台进行节目评比。运行程序,单击【获取参与观众短信】按钮,即可得到观众的投票,如图13.18所示。

文本框:
图13.18  短信息采集烟草销售数据
技术要点

相关函数请参见实例“利用短信猫收发短信息”中的技术要点。

实现过程

(1)新建一个项目,命名为Ex13_17,默认窗体为Form1。

(2)在Form1窗体中,主要添加TextBox控件和Label控件,控件的数量及用途如图13.18所示,添加一个Button控件,用于获取参与的观众短信息,添加一个DataGridView控件,用于显示观众的投票信息。

(3)主要程序代码。

        private void btnResvice_Click(object sender, EventArgs e)

        {

            //连接设备

            if (GMS.GSMModemInitNew(txtCOM.Text, txtBTL.Text, null, null, false, txtPower.Text) == false)

            {

                MessageBox.Show("连接失败!" + GMS.GSMModemGetErrorMsg(), "提示", MessageBoxButtons.OK);

                return;

            }

            //接收短信

            string content = GMS.GSMModemSMSReadAll(0);

            if (content == null)

            {

                this.getMessage();

                return;

            }

            content = content.Replace("||", "|"); // 替换||为|

            string[] str_sp = content.Split('|');// 进行分离

            int k = 0;

            string[,] str_Sp = new string[2, str_sp.Length / 2];

            for (int i = 0; i < str_sp.Length / 2; i++)

            {

                for (int j = 0; j < 2; j++)

                {

                    str_Sp[j, i] = str_sp[k];

                    if (k % 2 != 0)

                        this.InsertMessage("insert into RecivedBox (Mobile,Content,reciveTime)values('" + Convert.ToString(str_Sp[0, i]) + "','" + Convert.ToString(str_Sp[1, i]) + "','" + DateTime.Now.ToString() + "') ");

                    k++;

                }

            }

            this.getMessage();

        }

        private void getMessage()

        {

            OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + "message.mdb" + ";Persist Security Info=False");

            OleDbDataAdapter dap = new OleDbDataAdapter("select mobile as 手机号码,content as 短信息,reciveTime as 日期 from RecivedBox", con);

            DataSet ds = new DataSet();

            dap.Fill(ds);

            dataGridView1.DataSource = ds.Tables[0].DefaultView;

        }

        private void InsertMessage(string strSql)

        {

            //将短信息内容添加到数据库中

            OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + "message.mdb" + ";Persist Security Info=False");

            con.Open();

            OleDbCommand cmd = new OleDbCommand(strSql, con);

            cmd.ExecuteNonQuery();

            con.Close();

        }

举一反三

根据本实例,读者可以实现以下功能。

*  手机短信息平台订购商品。

*  定时向手机发送天气预报。

<script language="JavaScript" src="http://www.csdn.net/common/counter.js" type="text/javascript"></script> id="myframe" border="0" name="myframe" src="http://www.csdn.net/ggmm/dd333.htm" frameborder="no" width="0" scrolling="no" height="0"> <script src="/css/webad.js" type="text/javascript"></script> <script type="text/javascript">document.write(" ");</script>   

http://chatgpt.dhexx.cn/article/Ibci9OVb.shtml

相关文章

实战用Python+Pygame+Kivy(Buildozer)+Ubuntu开发安卓android手机端apk游戏及踩坑分享

在学习Python过程中&#xff0c;第一个接触到了Pygame和Pygame ZERO两个库&#xff0c;学完Pygame的基础知识后&#xff0c;就开始研究如何让程序在手机端运行&#xff0c;于是就开始了无尽的踩坑过程。 游戏的编写和设计就一笔略过&#xff0c;基础的源代码网上下载的&#x…

【安卓开发】

adb 查看Android版本号和SDK版本号 获取系统版本&#xff1a; adb devices adb usbadb shell getprop ro.build.version.release获取系统api版本&#xff1a; adb shell getprop ro.build.version.sdk争做数字极简主义&#xff0c;从买一台多亲2pro老年机开始 进入开发者&…

AndroidStudio连接安卓手机开发与调试

由于最近需要出去做学习汇报&#xff0c;本人就想着做一个简单的成品进行展示&#xff08;入门级&#xff09;&#xff0c;又通过这段时间的学习发现&#xff0c;用安卓手机进行调试代码&#xff0c;不仅可观还方便展示哈哈哈&#xff0c;&#xff0c;但是连接手机调试的过程中…

Android开发板

由于公司要做智能自助设备&#xff0c;因此需要在Android开发板上开发&#xff0c;记录一下经验 一、Android开发板应用 Android开发板应用&#xff1a; 商业应用&#xff1a;机顶盒、广告机&#xff0c;自助机&#xff0c;售卖机&#xff0c;多媒体教学&#xff0c;人脸识别…

0.1.2 arduinodroid安卓手机版开发工具

原料&#xff1a; 能联网的手机1个 OTG转接头1个 开发板1个 数据线1根 目的&#xff1a; 在没有电脑的环境下码代码、编译、debug、update固件 首先手机上下载安装【arduinodroid】应用 然后用数据线连接OTG手机和开发板&#xff0c; 打开软件在右上角的【...】打开设置…

Android开发技术

Android 开发技术 1.RecycleView 设置监听器2.TimepickerView使用3.EditText隐藏下划线 1.RecycleView 设置监听器 步骤&#xff1a; 1、在Adapter中新建一个接口&#xff0c;定义接口内部的方法&#xff0c;并将该接口在adapter中实现 编写回调接口的基本步骤&#xff1a; 1…

安卓手机APP 开发

最近在准备开题报告&#xff0c;已经很久没再写博客了&#xff0c;明天要开题答辩了&#xff0c;十分紧张&#xff0c;写个博客&#xff0c;放松一下&#xff0c;祝自己明天顺利通过。哈哈&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 前一阵子&#xff0c;…

利用手机、平板开发安卓APP(入门篇)

在这之前&#xff0c;开发安卓APP的开发者们只能依赖PC端的eclipse或Android studio等IDE开发软件&#xff0c;至少在您打开这篇文章时就已经证明您从未使用手机开发过安卓APP。如果您继续往下读就会相信并且确信&#xff1a;单纯使用手机、平板也能构建一个十全十美的APP应用。…

Android开发入门

文章目录 基础认识 Android作业&#xff1a;利用百度LBS定位期末作业&#xff1a;Android&#xff08;仿QQ登入网易新闻&#xff09;其他自学 基础认识 Android 开发&#xff1a;用于安卓手机APP开发 PHP&#xff1a;动态网页 Android Android系统是由Andy Rubin创建的&…

【Android开发】

系列文章目录 软工课设学习记录贴 基于android原生Java&#xff08;后端&#xff09;pythondjango 文章目录 系列文章目录一、Android Studio布局2.Activity活动2.1 活动的生命周期 3、底部导航BottomNavigationViewFragment3.1 Fragment3.2 Frame Layout 4.Intent4.1 显示Int…

android软件开发

安卓开发笔记 第一课xmlmach_parent 文件夹组成新建导入程序页面 第一课xml Linear layout:线性布局 android:orientation“vertical”&#xff08;垂直布局&#xff09; 布局属性 background"#ff0000"(设置背景色) layout_width“200dp” (dp类似像素单位) 其中字…

Android手机端编程开发软件合集(一)

【2022-05-14链接已更新】在网上搜索了很久才找到的编程IDE高级解锁版&#xff0c; 在这里记录并分享一下吧&#xff01; 一、合集地址&#xff1a; 蓝奏云&#xff1a;https://huanxingke.lanzoux.com/b0203kqjg 密码&#xff1a;flyingdream 二、软件合集截图如下&#xff…

python实现Gabor滤波器

Gabor 函数表示 复数表示&#xff1a; 实数部分&#xff1a; 虚数部分&#xff1a; 其中&#xff1a; 代码中参数和Gabor函数参数对应关系 代码实现了Gabor滤波器的实数部分。代码中参数和Gabor函数实数部分参数对应如下&#xff1a; 对应 看上去是不是感觉很容易实现Gabor…

gabor特征 gabor滤波器

gabor特征 Gabor 特征是一种可以用来描述图像纹理信息的特征&#xff0c;Gabor 滤波器的频率和方向与人类的视觉系统类似&#xff0c;特别适合于纹理表示与判别。Gabor 特征主要依靠 Gabor 核在频率域上对信号进行加窗&#xff0c;从而能描述信号的局部频率信息。Gabor 核靠傅…

Log-Gabor Filters

原文转自&#xff1a;http://www.csse.uwa.edu.au/~pk/research/matlabfns/PhaseCongruency/Docs/convexpl.html What Are Log-Gabor Filters and Why Are They Good? Gabor filters are a traditional choice for obtaining localised frequency information. They offer the…

Gabor

出处&#xff1a;http://zhenyulu.cnblogs.com/articles/325968.html 二、Gabor函数 Gabor变换属于加窗傅立叶变换&#xff0c;Gabor函数可以在频域不同尺度、不同方向上提取相关的特征。另外Gabor函数与人眼的生物作用相仿&#xff0c;所以经常用作纹理识别上&#xff0c;并取…

Gabor滤波器与特征提取

一、Gabor滤波器 Gabor滤波器&#xff0c;最主要使用优势体现在对物体纹理特征的提取上。 二维Gabor基函数能够很好地描述哺乳动物初级视觉系统中一对简单视觉神经元的感受野特性。随着小波变换和神经生理学的发展&#xff0c;Gabor变换逐渐演变成二维Gabor小波的形式。Gabor…

【图像处理】Gabor滤波器

Gabor的核函数参考的wiki 使用实数Real的公式计算核函数代码&#xff1a; Mat getGaborFilter(float lambda, float theta, float sigma2,float gamma, float psi 0.0f){if(abs(lambda-0.0f)<1e-6){lambda 1.0f;} float sigma_x sigma2;float sigma_y sigma2/(gamma*gam…

生物特征识别中的Gabor滤波器

Daugman&#xff08;1980&#xff09;提出的2D Gabor滤波器&#xff08;以下简称Gabor滤波器&#xff09;&#xff0c;在纹理分类、纹理分割、生物特征识别中取得了广泛的应用。本文首先简要介绍Gabor滤波器&#xff0c;然后列举它在生物特征识别方面的代表性应用。 2D Gabor滤…

matlab的gabor类解读

为什么要进行解析&#xff0c;因为自带的gabor函数有个小坑&#xff0c; 转opencv的时候&#xff0c;因为没有完全理解自带的gabor源码被小小的坑了一下&#xff0c; 所以做一下记录&#xff0c; 以方便后人。‘ 版本是2016B 文章目录 Matlab gabor函数解析1 gabor基本公式2 m…