日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android学习第三天 创建demo 电话拨号器

發布時間:2023/12/20 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android学习第三天 创建demo 电话拨号器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hello World!

打開Android Studio,點擊右上角“File”=>“New”=>“New Project”


選擇其中一個模型 “Empty Activity” 點擊 “Next”
彈出一個對話框:

點擊“Finish”創建了一個項目

一、android項目的目錄結構講解


1、.gradle和.idea
這兩個目錄下放置的都是Android Studio自動生成的一些文件,我們無須關心,也不要去手動編輯。

2、app
項目中的代碼、資源等內容幾乎都是放置在這個目錄下的,我們后面的開發工作也基本都是在這個目錄下進行的,待會兒還會對這個目錄單獨展開進行講解。

3、build
這個目錄你也不需要過多關心,它主要包含了一些在編譯時自動生成的文件。

4、gradle
這個目錄下包含了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前將gradle下載好,而是會自動根據本地的緩存情況決定是否需要聯網下載gradle。Android Studio默認沒有啟動gradle wrapper的方式,如果需要打開,可以點擊Android Studio導航欄 ——> File ——> Settings ——> Build,Execution,Deployment ——> Gradle,進行配置更改。

5、.gitignore
這個文件是用來將指定的目錄或文件排除在版本控制之外的。

6、build.gradle
這是項目全局的gradle構建腳本,通常這個文件中的內容是不需要修改的。下面會詳細分析gradle構建腳本中的具體內容。

7、gradle.properties
這個文件是全局的gradle配置文件,在這里配置的屬性將會影響到項目中所有的gradle編譯腳本。

8、gradlew和gradlew.bat
這兩個文件是用來在命令行界面中執行gradle命令的,其中gradlew是在Linux或Mac系統中使用的,gradlew.bat是在Windows系統中使用的。

9、HelloWorld.iml
iml文件是所有IntelliJ IDEA項目都會自動生成的一個文件(Android Studio是基于IntelliJ IDEA開發的),用于標識這是一個IntelliJ IDEA項目,我們不需要修改這個文件中的任何內容。

10、local.properties
這個文件用于指定本機中的Android SDK路徑,通常內容都是自動生成的,我們并不需要修改。除非你本機中的Android SDK位置發生了變化,那么就將這個文件中的路徑改成新的位置即可。

11、settings.gradle
這個文件用于指定項目中所有引入的模塊。由于HelloWorld項目中就只有一個app模塊,因此該文件中也就只引入了app這一個模塊。通常情況下模塊的引入都是自動完成的,需要我們手動去修改這個文件的場景可能比較少。

二:app目錄下的結構


1、build
這個目錄和外層的build目錄類似,主要也是包含了一些在編譯時自動生成的文件,不過它里面的內容會更多更雜,我們不需要過多關心。

2、libs
如果你的項目中使用到了第三方jar包,就需要把這些jar包都放在libs目錄下,放在這個目錄下的jar包都會被自動添加到構建路徑里去。

3、AndroidTest
此處是用來編寫Android Test測試用例的,可以對項目進行一些自動化測試。

4、java
毫無疑問,java目錄是放置我們所有java代碼的地方,展開該目錄,你將看到我們剛才創建的HelloWorldActivity文件就在里面。

5、res
這個目錄下的內容就有點多了。簡單點說,就是你在項目中使用到的所有圖片,布局,字符串等資源都要存放在這個目錄下。當然這個目錄下還有很多子目錄,圖片放在drawable目錄下,布局放在layout目錄下,字符串放在values目錄下,所以你不用擔心會把整個res目錄弄得亂糟糟的。

6、AndroidManifest.xml
這是你整個Android項目的配置文件,你在程序中定義的所以四大組件都需要在這個文件里注冊,另外還可以在這個文件中給應用程序添加權限聲明。這個文件以后會經常用到。

7、test
此處是用來編寫Unit Test測試用例的,是對項目進行自動化測試的另一種方式。

8、.gitignore
這個文件用于將app模塊內的指定的目錄或文件排除在版本控制之外,作用和外層的.gitignore文件類似。

9、app.iml
IntelliJ IDEA項目自動生成的文件,我們不需要關心或修改這個文件中的內容。

10、build.gradle
這是app模塊的gradle構建腳本,這個文件中會指定很多項目構建相關的配置。

11、proguard-rules.pro
這個文件用于指定項目代碼的混淆規則,當代碼開發完成后打成安裝包文件,如果不希望代碼被別人破解,通常會將代碼混淆,從而讓破解者難以閱讀。

三:res目錄結構

1、drawable文件夾:存放圖片
2、layout文件夾:存放布局文件
3、mipmap:存放應用圖標
4、values文件夾:存放字符串、樣式、顏色等配置的
定義一個應用程序名的字符串,有以下兩種方式來引用它
在代碼中通過R.string.app_name可以獲得該字符串的引用
在XML中通過@string/app_name可以過得該字符串的引用

四:詳解build.gradle文件

1.最外層目錄下的build.gradle文件
jcenter()其實是一個代碼托管倉庫,很多android開源項目都會選擇將代碼托管到jcenter上;dependencies閉包中使用classpath聲明了一個Gradle插件。

2.app目錄下的build.gradle文件

第一行應用了一個插件,一般有兩種值可選:com.android.application表示一個應用程序模塊;com.android.library表示一個庫模塊。一個可直接運行,一個作為代碼庫依附于別的應用程序模塊來運行。

Android打包

ADB指令練習


adb start-server =》開啟adb服務
adb uninstall + 包名 =》 卸載應用
adb install + apk(apk的絕對路徑) =》安裝應用
adb devices =》查看連接設備
adb push +文件(文件的絕對路徑) =》將文件從電腦上推到設備上
adb pull + 文件(設備上文件的絕對路徑) =》將設備上的文件拉到電腦上
adb shell =》可以進入到linux命令行 執行linux命令

電話撥號器案例

1、畫UI user interface 畫界面 layout->xml 布局文件
2、對著UI寫JAVA代碼
3、部署到設備上看效果

代碼片段

activity_main.xml
UI文件

<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"tools:layout_editor_absoluteY="81dp"><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="請輸入電話號碼!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.027" /><EditTextandroid:id="@+id/editText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="27dp"android:ems="10"android:hint="在這里輸入電話"android:inputType="textPersonName"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/textView"app:layout_constraintVertical_bias="0.0" /><Buttonandroid:id="@+id/button"android:layout_width="132dp"android:layout_height="60dp"android:layout_marginTop="64dp"android:layout_marginEnd="168dp"android:layout_marginRight="168dp"android:text="撥打此號碼"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.333"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/editText"app:layout_constraintVertical_bias="0.013" /></androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java
入口文件

package com.example.phoneDial;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;public class MainActivity extends AppCompatActivity {private EditText et_number;//Activity 代表了一個用戶的界面 每個android的界面都對應一個activity//activity可以創建一個窗口在這個窗口上加載用戶的界面(UI)這個界面就是用來跟用戶交互的@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//當activity創建的時候就會調用onCreate 在onCreate中做初始化的操作//首先調用setContentView方法加載界面setContentView(R.layout.activity_main);//找到要操作的控件對應的java對象 findViewById 這個方法的返回值是View對象//View 是所有android控件的父類Button btn_call = findViewById(R.id.button);et_number=findViewById(R.id.editText);//給按鈕添加點擊事件btn_call.setOnClickListener(new MyOnClickListener());}private class MyOnClickListener implements View.OnClickListener{@Overridepublic void onClick(View v) {//當空間被點擊的時候就會調用這個onclick方法//1、獲取用戶的輸入String number =et_number.getText().toString();//2、判斷用戶輸入是否為空if(TextUtils.isEmpty(number)){//Toast 界面輸出一個短暫的提示//第一個參數 上下文context Activity就是一個上下文 可以傳入當前activity對象//第二個參數 要顯示的提示文字//第三個參數 顯示提示的時間長度 Toast.LENGTH_SHORT(顯示的時長較短);Toast.LENGTH_LONG(顯示的時長較長)//不要忘記調用show()方法顯示Toast.makeText(MainActivity.this,"電話號碼不能為空!",Toast.LENGTH_SHORT).show();System.out.println("用戶輸入是空!");}else{System.out.println("打電話:"+number);//Intent 意圖就是對要進行的操作的抽象描述Intent intent=new Intent();//給意圖設置要操作的動作打電話的動作ACTION_CALLintent.setAction(Intent.ACTION_CALL);//給意圖設置要攜帶的數據//URL 統一資源定位符 http:// ftp:// https:////Uri 統一資源標識符 可以自定義協議 url子類父類關系Uri data=Uri.parse("tel:"+number);intent.setData(data);//開啟打電話的activity(打電話的界面)startActivity(intent);}}} }

AndroidManifest.xml
配置電話權限

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.phoneDial"><uses-permission android:name="android.permission.CALL_PHONE"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"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>

遇到的問題:
1、無法訪問電話權限,這個是由于你沒有手動開啟應用權限,需要手動去設置該應用的權限;在正式的app中安裝的時候就會提示授權。

java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:x cmp=com.android.server.telecom/.components.UserCallActivity } from ProcessRecord{9c7d329 11919:com.example.phoneDial/u0a328} (pid=11919, uid=10328) with revoked permission android.permission.CALL_PHONE

2、撥號不成功,這個是由于系統設置不能撥打緊急號碼;可以嘗試撥打自己的手機號。

總結

以上是生活随笔為你收集整理的Android学习第三天 创建demo 电话拨号器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。