编程新技术实务实验三

系列文章目录

编程新实务实验一

编程新实务实验二



(先读我)重要提示(先读我)

  • 这个实验好像不需要验收,为了专栏完整性我就写了。
  • 按照我的做比较好,因为老师给的代码和方法都有几个小问题,我在最后会说
  • 这个实验很简单,大概30分钟足够了(配置好环境的话,配置环境要下载一大堆东西)

实验用的IDE是IDEA,环境都是一键配置的

实验目的

安装配置好Android开发环境,并使用其开发Android手机拨号器。

实验对应知识点

Android的应用编程框架以及Android API的使用。

实验步骤

配置环境并新建项目

打开IDEA,选择左上角

File -> New -> Project

左边选择Andriod

我现在已经安装好环境了,没有没安装环境的截图,按理来说一直点next和Finish他就会自动下载,等着下载完就行了。

(有的同学下载完复制完代码后还是报错(标红/编译不过),但是我没有出现错误,所以也不知道可能的解决办法,可以百度一下具体的报错信息)

自动安装完后应该显示如下图:
在这里插入图片描述
我们选择第四个,Empty Activity点Next

然后选配置如下图,一般选4.1版本如红框,name改一个自己看着舒服的名字就行,我改成Myphone
在这里插入图片描述

然后新建好项目如图:
红框标出等会我们需要修改的文件
在这里插入图片描述
然后我们关注一下右上角,如下图

在红框的地方我们可以选择我们的andriod虚拟机

等会写好应用,点绿色的运行符号就会自动安装到我们的andriod虚拟机里并运行了

现在我已经下载好了一个型号为Pixel2 的虚拟机

如果你自己用的手机是andriod或者能借到室友的手机的话,虚拟机的安装不是必须的步骤(仅仅为了最后测试效果),具体方法我最后在“最后一步:测试” 那里会讲到
在这里插入图片描述

我们可以根据下面三张图来下载我们的andriod虚拟机,很简单不做累述了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

好啦,大功告成!

我们现在开始写代码!


开始写代码

MainActivity.java

首先我们打开MainActivity.java文件,这里面主要是等会在前端视图层按钮点击的对应处理方法

比如记录输入的数字啦,删除数字啦,拨打电话啦等等~

package com.example.myphone;

import android.content.Intent;
import android.net.Uri;
import android.text.Editable;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    EditText et;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et = (EditText)this.findViewById(R.id.editText1);
    }

    public void click(View view){
        String str = et.getText().toString();
        str += view.getTag().toString();
        et.setText(str);
    }

    public void dial(View view){
        String str = et.getText().toString();
        if((str != null) && !str.trim().equals("")){
            Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + str));
            startActivity(intent);
        }else{
            Toast.makeText(MainActivity.this,"请点击拨号按钮",Toast.LENGTH_LONG).show();
        }
    }

    public void del(View view){
        String str = et.getText().toString();
        if((str != null) && !str.trim().equals("")){
            str = str.substring(0,str.length() - 1);
            et.setText(str);
        }
    }


}

activity_main.xml

然后打开activity_main.xml文件,这个文件主要是视图层的东西

你既可以用拖动滑块的方式生成代码,也可以写代码渲染视图,是一样的!

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<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: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" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/editText1"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_gravity="center"
            android:layout_weight="2"
            android:ems="10"
            android:focusable="false"
            android:hint="请输入号码" >

            <requestFocus />
        </EditText>

        <TableLayout
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_marginTop="20dp"
            android:layout_weight="12" >

            <TableRow
                android:id="@+id/tableRow1"
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="1" >

                <ImageButton
                    android:id="@+id/imageButton1"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="click"
                    android:src="@drawable/n1"
                    android:tag="1" />

                <ImageButton
                    android:id="@+id/imageButton2"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="click"
                    android:src="@drawable/n2"
                    android:tag="2" />

                <ImageButton
                    android:id="@+id/imageButton3"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="click"
                    android:src="@drawable/n3"
                    android:tag="3" />

            </TableRow>

            <TableRow
                android:id="@+id/tableRow2"
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="1" >

                <ImageButton
                    android:id="@+id/imageButton4"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="click"
                    android:src="@drawable/n4"
                    android:tag="4" />

                <ImageButton
                    android:id="@+id/imageButton5"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="click"
                    android:src="@drawable/n5"
                    android:tag="5" />

                <ImageButton
                    android:id="@+id/imageButton6"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="click"
                    android:src="@drawable/n6"
                    android:tag="6" />

            </TableRow>

            <TableRow
                android:id="@+id/tableRow3"
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="1" >

                <ImageButton
                    android:id="@+id/imageButton7"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="click"
                    android:src="@drawable/n7"
                    android:tag="7" />

                <ImageButton
                    android:id="@+id/imageButton8"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="click"
                    android:src="@drawable/n8"
                    android:tag="8" />

                <ImageButton
                    android:id="@+id/imageButton9"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="click"
                    android:src="@drawable/n9"
                    android:tag="9" />

            </TableRow>

            <TableRow
                android:id="@+id/tableRow4"
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="1" >

                <ImageButton
                    android:id="@+id/imageButton10"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="click"
                    android:src="@drawable/star"
                    android:tag="*" />

                <ImageButton
                    android:id="@+id/imageButton11"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="click"
                    android:src="@drawable/n0"
                    android:tag="0" />

                <ImageButton
                    android:id="@+id/imageButton12"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="click"
                    android:src="@drawable/sharp"
                    android:tag="#" />

            </TableRow>

            <TableRow
                android:id="@+id/tableRow5"
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="1" >

                <ImageButton
                    android:id="@+id/imageButton13"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="click"
                    android:src="@drawable/add_n"
                    android:tag="+" />

                <ImageButton
                    android:id="@+id/imageButton14"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="dial"
                    android:src="@drawable/dialpad"
                    android:tag="dial" />

                <ImageButton
                    android:id="@+id/imageButton15"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@drawable/bg_alibuybutton"
                    android:onClick="del"
                    android:src="@drawable/delete_n"
                    android:tag="del" />


            </TableRow>
        </TableLayout>
    </LinearLayout>
</RelativeLayout>



点击右上角的design,可以看到我们写好代码后视图就已经出来了在这里插入图片描述

在这里插入图片描述
但是你们应该只有右边和我一样,左边不太一样(同时代码部分也有标红报错),为什么呢?

因为我们还没有添加资源文件!

这些1234567890数字,和加号电话删除符号都是图片!所以我们需要把这些资源文件放到项目里

那个 网址上找到老师给的资源文件,并复制进项目红框所示文件夹下

如下图所示:

指导文件让放在绿色框文件夹下,但是代码给的路径就是红色框!!

这就是我前面说的指导文件的坑之一。

虽然很简单,但是指导文件犯这种简单的错误还是让人忍不住吐槽
在这里插入图片描述

(不想找的小伙伴可以直接看我github项目中有)

AndriodManifest.xml

最后打开这个文件,加一句话,就是给我们这个应用加拨号的权限

在这里插入图片描述
代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.myphone">

    <uses-permission android:name="android.permission.CALL_PHONE"/>

    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="zxc自制拨号器"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

最后一步:测试

都写好之后点击右上角运行

如果配置好andriod虚拟机的小伙伴虚拟机选好虚拟机就会启动啦,稍等片刻~~~~~

没配置虚拟机的小伙伴可以连接USB连接自己的andriod手机

然后在手机的开发者工具里打开USB连接调试(进开发者模式的办法自行百度很简单)

然后连接上选择连接模式为:文件传输

然后在稍等片刻就会看到自己的手机型号显示在显示虚拟机那里,点击运行稍等片刻就可以在自己的手机上看到啦!

下面我们展示一下虚拟机的预览页面

在这里插入图片描述
出结果了,爱了爱了

但是!!!问题又来了!

我们输完号码,点击拨号,居然闪退了!!!!(在真实手机上也是一样的),咋回事呢?

研究后发现,不管是在真实手机还是虚拟机上,这个应用的电话权限都是默认拒绝的,我们需要在应用管理的界面把这个权限设置为允许才行!

如图:

在这里插入图片描述
这是真的超级大坑!

指导书里根本就没提过:)

至此,实验结束。

github传送门

点我~

总结

预备实验,比较简单。

几个小坑列举一下:

  1. 指导书有一处代码与图片不符

  2. 资源放置路径指导书和实际代码不一致

  3. 手机或者模拟机不开权限点拨打电话键会闪退,指导书好像没有提到

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值