大創項目個人周報(2024.7.22—2024.7.28)
本周個人情況匯報
我本周主要學習了安卓開發的內容,根據《第一行代碼Android》開展了學習。
一、分析自己的第一個Android程序

- 通過看書,我對項目的各個文件的功能有了大致了解,除app目錄外,大多數文件和目錄是自動生成的,app目錄是今后開發工作主要涉及的部分。app的結構如下。

- 通過學習,我了解了項目運行的具體流程,詳解了項目中的資源,并且學習掌握日志工具的使用。
二、學習Activity的使用
- Activity是可以包含用戶界面的組件,主要用于和用戶進行交互。
我手動創建了Activity并且學習創建和加載布局文件。
![3]()
按鈕
在此編輯器里,通過XML文件編輯布局,添加一個按鈕
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button 1"
/>
在Activity中加載布局
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.first_layout)
}
在AndroidManifest文件中注冊,以使Activity生效
<activity
android:name=".FirstActivity"
android:exported="true"
android:label="This is FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
效果如下

Toast
- Toast是 Android 系統提供的一種非常好的提醒方式,在程序中可以使用它將一些短小的信息通知給用戶,這些信息會在一段時間后自動消失,并且不會占用任何屏幕空間。
在onCreate中添加代碼
val button1: Button = findViewById(R.id.button1)
button1.setOnClickListener {
Toast.makeText(this, "You clicked Button1", Toast.LENGTH_SHORT).show()
}
效果如下

菜單
在res目錄下新建menu文件,添加代碼
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/add_item"
android:title="Add"/>
<item
android:id="@+id/remove_item"
android:title="Remove"/>
</menu>
在FirstActivity中添加代碼以使菜單顯示并響應
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.add_item -> Toast.makeText(this, "You clicked Add", Toast.LENGTH_SHORT).show()
R.id.remove_item -> Toast.makeText(this,"You clicked Remove", Toast.LENGTH_SHORT).show()
}
return true
}
效果如下


銷毀Activity
- 將button1.setOnClickListener中的代碼改作
finish()即可在按下按鈕后銷毀Activity。
Intent
-
Intent 是 Android 程序中各組件之間進行交互的一種重要方式,它不僅可以指明當前組件想要執行的動作,還可以在不同組件之間傳遞數據。Intent一般可用于啟動Activity、啟動 Service以及發送廣播等場景。書中本節所講,即啟動Activity。
-
顯式Intent方法如下
首先創建SecondActivity,將布局代碼替換如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button 2" />
</LinearLayout>
修改FirstActivity中的點擊事件
button1.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
}
執行程序,效果即點擊Button1后自動跳轉到Button2.
三、本周遇到的問題及利用chatGPT等AI工具的解決過程
在AndroidManifest文件中手動注冊,以使Activity生效
<activity
android:name=".FirstActivity"
android:label="This is FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
這一部分中,我的代碼與書中示例的代碼有不同,多了一句android:exported="false",而在我試圖不改變這句代碼,直接加進去其他代碼,系統報錯無法編譯。故詢問AI。
AI:
"android:exported="false" 用于控制一個活動是否可以被其他應用所啟動。當設置為 "false" 時,表示該活動只能在啟動它自身應用的上下文中被訪問。也就是說,只有從同一個應用內部的其他活動、服務或廣播接收器才可啟動該活動。當設置為 "true",則表示該活動可以從其他應用進行啟動。
如果你將一個活動的 android:exported 屬性設置為 "false",那么從外部應用點擊鏈接或通過其他應用的廣播等方式都無法啟動該活動。這種設置通常用于保護敏感功能,例如隱私相關的設置頁面、支付頁面或權限請求界面,防止外部應用濫用或不小心觸發這些功能。
例如,假設你有一個活動專門用于顯示用戶的個人資料信息。你可能會希望控制只有從應用內部的其他功能(如用戶主頁或個人資料編輯頁面)中啟動,以確保用戶數據安全和隱私保護。在這種情況下,設置 android:exported="false" 是非常合適的。
然而,在大多數情況下,如果一個活動需要被其他應用訪問或啟動,例如一些基本的用戶界面活動(如主頁、列表瀏覽等),通常會將其設置為 "true",以便提供更好的用戶體驗和應用集成。
我遂將false改作true,運行正常。

浙公網安備 33010602011771號