Вы находитесь на странице: 1из 23

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ

КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ


ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ТЕЛЕКОММУНИКАЦИЙ
ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА

Кафедра защищенных систем связи

Отчет по лабораторной работе


“Разработка мобильного приложения на Android, работа с файлами
и shared preferences.”

по дисциплине «Технологии защиты беспроводных сетей и мобильных


приложений»

Выполнил студент гр. -27


Нечаев А.А.
Держко Д.Я.
Принял к.т.н. , доцент кафедры
ЗСС
Ковцур М. М.
Цель работы:
Реализовать мобильное приложение, содержащее интерфейс и позволяющее
реализовать простейшее взаимодействие с файлом, а именно, чтение и запись
из файла, а также взаимодействие с shared preference.
Выполнение:
Листинг MainActivity.kt:
package com.example.lab5

import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import java.io.*

class MainActivity : AppCompatActivity() {

private lateinit var inputPlainText: EditText


private lateinit var outputTextView: TextView
private lateinit var passview: EditText
private lateinit var passtext: TextView
private lateinit var sharedPreferences: SharedPreferences

override fun onCreate(savedInstanceState: Bundle?) {


super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
supportActionBar?.hide()

inputPlainText = findViewById(R.id.plain_text)
outputTextView = findViewById(R.id.text_view)
passview = findViewById(R.id.passview)
passtext = findViewById(R.id.passtext)
sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE)

val bntSave: Button = findViewById(R.id.save_button)


bntSave.setOnClickListener {
val editor = sharedPreferences.edit()
editor.putString("passview", passview.getText().toString())
editor.apply()
}

val name = sharedPreferences.getString("passview", "")


passtext.text = "Pass: $name"

fun read(view: View?) {


openFileInput("test.txt").use { fileInputStream ->
val reader = InputStreamReader(fileInputStream)
val buffer = BufferedReader(reader)
outputTextView.text = buffer.readText()
}
}

fun write(view: View?): Unit {


val data:String = inputPlainText.text.toString()
val fileOutputStream = openFileOutput("test.txt", MODE_PRIVATE)
fileOutputStream.write(data.toByteArray())
}

fun save(view: View?){

}
}

Листинг PassActivity.kt
package com.example.lab5
import android.content.Intent
import android.content.SharedPreferences
import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.TextView
import android.widget.EditText
import android.widget.Toast

class PassActivity : AppCompatActivity() {


private lateinit var username: EditText
private lateinit var password: EditText
private lateinit var login: Button
private lateinit var loginLocked: TextView
private lateinit var attempts: TextView
private lateinit var numberOfAttempts: TextView
private lateinit var sharedPreferences: SharedPreferences
private var numberOfRemainingLoginAttempts = 3
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_pass)
supportActionBar?.hide()
username = findViewById(R.id.edit_user)
password = findViewById(R.id.edit_password)
login = findViewById(R.id.button_login)
loginLocked = findViewById(R.id.login_locked)
attempts = findViewById(R.id.attempts)
numberOfAttempts = findViewById(R.id.number_of_attempts)
numberOfAttempts.text = numberOfRemainingLoginAttempts.toString()
}
fun Login(view: android.view.View) {
sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE)
val name = sharedPreferences.getString("passview", "admin")
if (username.text.toString() == "admin"
&& password.text.toString() == name) {
Toast.makeText(applicationContext,
"Вход выполнен!", Toast.LENGTH_SHORT).show()
// Выполняем переход на другой экран:
val intent = Intent(this@PassActivity, MainActivity::class.java)
startActivity(intent)
}
else {
Toast.makeText(applicationContext,
"Неправильные данные!",
Toast.LENGTH_SHORT).show()
numberOfRemainingLoginAttempts--

attempts.visibility = View.VISIBLE
numberOfAttempts.visibility = View.VISIBLE
numberOfAttempts.text = numberOfRemainingLoginAttempts.toString()
if (numberOfRemainingLoginAttempts == 0) {
login.isEnabled = false
loginLocked.visibility = View.VISIBLE
loginLocked.setBackgroundColor(Color.RED)
loginLocked.text = "Вход заблокирован!!!"
}
}
}

fun Exit(view: android.view.View) {


finish()
}
}

Листинг activity_main.xml
<?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">

<ScrollView
android:id="@+id/SCROLLER_ID"
android:layout_width="336dp"
android:layout_height="443dp"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="20dp"
android:fillViewport="true"
android:maxWidth="300dp"
android:scrollbars="vertical"
android:singleLine="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/save_button"
tools:ignore="MissingConstraints">

<TextView
android:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="20dp"
android:scrollbars="vertical"
android:text="TextView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</ScrollView>

<EditText
android:id="@+id/plain_text"
android:layout_width="305dp"
android:layout_height="38dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="112dp"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.515"
app:layout_constraintStart_toStartOf="parent" />

<Button
android:id="@+id/wirte_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="45dp"
android:layout_marginTop="18dp"
android:text="@string/write"
android:onClick="write"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/plain_text" />

<Button
android:id="@+id/read_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:layout_marginEnd="52dp"
android:text="@string/read"
android:onClick="read"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/plain_text" />

<Button
android:id="@+id/save_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginEnd="140dp"
android:onClick="save"
android:text="@string/save"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<EditText
android:id="@+id/passview"
android:layout_width="114dp"
android:layout_height="44dp"
android:layout_marginStart="16dp"
android:layout_marginTop="20dp"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="46dp"
android:layout_marginBottom="15dp"
android:text="@string/student1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />

<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="46dp"
android:layout_marginBottom="15dp"
android:text="@string/student2"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />

<TextView
android:id="@+id/passtext"
android:layout_width="99dp"
android:layout_height="46dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="24dp"
android:text="TextView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Листинг activity_pass.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin">

<TextView
android:id="@+id/Login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:text="@string/authorization"
android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
android:id="@+id/user_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/Login"
android:layout_alignParentLeft="true"
android:layout_marginLeft="110dp"
android:layout_marginTop="94dp"
android:text="@string/user"
android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
android:id="@+id/edit_user"
android:layout_width="119dp"
android:layout_height="wrap_content"
android:layout_below="@+id/Login"
android:layout_alignBottom="@+id/user_text"
android:layout_marginLeft="33dp"
android:layout_marginTop="79dp"
android:layout_marginBottom="-20dp"
android:layout_toRightOf="@+id/user_text"
android:hint="@string/enter_user">

<requestFocus />
</EditText>

<TextView
android:id="@+id/password_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/user_text"
android:layout_alignLeft="@+id/user_text"
android:layout_marginLeft="0dp"
android:layout_marginTop="50dp"
android:text="@string/pass"
android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
android:id="@+id/edit_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/edit_user"
android:layout_alignRight="@+id/edit_user"
android:layout_alignBottom="@+id/password_text"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:layout_marginBottom="-14dp"
android:hint="@string/enter_pass"
android:inputType="textPassword" />

<TextView
android:id="@+id/attempts"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/password_text"
android:layout_alignLeft="@+id/password_text"
android:layout_marginLeft="-20dp"
android:layout_marginTop="53dp"
android:text="@string/attempts"
android:textAppearance="?android:attr/textAppearanceMedium"
android:visibility="invisible" />
<Button
android:id="@+id/button_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/attempts"
android:layout_alignParentEnd="true"
android:layout_marginTop="62dp"
android:layout_marginEnd="58dp"
android:onClick="Login"
android:text="@string/login" />

<TextView
android:id="@+id/number_of_attempts"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/edit_password"
android:layout_alignRight="@+id/user_text"
android:layout_alignParentEnd="true"
android:layout_marginTop="50dp"
android:layout_marginEnd="141dp"
android:layout_marginRight="-104dp"
android:visibility="invisible" />

<TextView
android:id="@+id/login_locked"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/attempts"
android:layout_alignLeft="@+id/attempts"
android:layout_alignEnd="@+id/edit_password"
android:layout_alignRight="@+id/edit_password"
android:layout_alignParentBottom="true"
android:layout_marginBottom="57dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:visibility="invisible" />

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/attempts"
android:layout_marginTop="62dp"
android:layout_marginEnd="78dp"
android:layout_toStartOf="@+id/button_login"
android:onClick="Exit"
android:text="@string/exit" />

<TextView
android:id="@+id/textView3"
android:layout_width="122dp"
android:layout_height="33dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="60dp"
android:layout_marginBottom="21dp"
android:text="@string/student1" />
<TextView
android:id="@+id/textView4"
android:layout_width="122dp"
android:layout_height="33dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="200dp"
android:layout_marginBottom="21dp"
android:text="@string/student2" />

</RelativeLayout>

Листинг strings.xml
<resources>
<string name="app_name">Lab4</string>
<string name="txt_main">Main Activity</string>
<string name="txt_btn_change_act">Switch</string>
<string name="txt_plainText2">Enter text</string>
<string name="txt_plainText">Enter more text</string>
<string name="txt_act2">Second Activity</string>
<string name="exit">Exit</string>
<string name="student1">Nechaev Andrey</string>
<string name="student2">Derzhko Dmitriy</string>
</resources>
Рис 1. Получившееся приложение
Рис 2. Вход с неправильными данными
Рис 3. Вход с правильными данными, переход на MainActivity
Рис 4. Часть для смены пароля. Хранится в SharedPreferences

Рис 5. Часть для записи в файл или чтения файла


Рис 6. Результат работы кнопки read после записи в файл
Рис 7. Запишем в файл большой текст (А.С. Пушкин – У лукоморья дуб
зеленый)
Рис 8. Возможность прокрутки текста
Рис 9. Репозиторий на GitHub

Вывод:
Изучили возможности и инструменты среды разработки Android Studio,
изучили принципы создания и работы с файлом в контексте ос Android, а
также с shared preference.

Вам также может понравиться