Để một ứng dụng Android có thể ghi vào bộ nhớ ngoài, ứng dụng đó cần có quyền truy cập vào bộ nhớ ngoài. Trong danh sách các quyền được liệt kê, quyền "android.permission.WRITE_EXTERNAL_STORAGE" là quyền cho phép ứng dụng ghi vào bộ nhớ ngoài. Điều này có nghĩa là ứng dụng có thể lưu trữ dữ liệu của mình vào bộ nhớ ngoài, chẳng hạn như bộ nhớ đệm, thẻ nhớ hoặc bộ nhớ USB. Quyền này rất quan trọng vì nó cho phép ứng dụng lưu trữ dữ liệu lớn và truy cập vào bộ nhớ ngoài một cách dễ dàng. Tuy nhiên, quyền này cũng có thể gây ra vấn đề bảo mật nếu không được sử dụng một cách cẩn thận.
Mobile Programming - Lập trình di động
Chủ đề học tập
PRM392 - Chương 1: Nền tảng Android và công cụ phát triển
Trắc nghiệm PRM392 chương 1 - Nền tảng hệ điều hành Android và bộ công cụ phát triển: bốn tầng của Android Platform Architecture, nhân Linux, Hardware Abstraction Layer, Android Runtime; vai trò của Android SDK, Android Studio, emulator và AVD Manager; tệp build.gradle cấp dự án và cấp module, compileSdkVersion; tệp AndroidManifest.xml, tệp R sinh tự động, cửa sổ Logcat; bốn thành phần ứng dụng, luồng chính và lỗi ANR.
PRM392 - Chương 2: Activity, Fragment và vòng đời
Trắc nghiệm PRM392 chương 2 - Activity và Fragment: đầy đủ vòng đời onCreate, onStart, onResume, onPause, onStop, onDestroy và thời điểm gọi từng phương thức; lưu trạng thái với onSaveInstanceState khi xoay màn hình; mở màn hình mới và nhận kết quả trả về; kết thúc Activity bằng finish; khác biệt giữa Fragment và Activity, FragmentManager và FragmentTransaction, thêm Fragment động, ListFragment và cách truyền dữ liệu từ Activity sang Fragment.
PRM392 - Chương 3: Giao diện, layout và tài nguyên
Trắc nghiệm PRM392 chương 3 - Dựng giao diện Android: LinearLayout với layout_weight và orientation, RelativeLayout, ConstraintLayout và Chains; các View thường dùng TextView, EditText, Button, ImageView, Spinner, CheckBox và RadioGroup; bắt sự kiện bằng setOnClickListener, setOnTouchListener, TextWatcher và thuộc tính android:onClick; quản lý tài nguyên trong thư mục res, chuỗi trong strings.xml, theme và style, menu tuỳ chọn, hộp thoại và Toast.
PRM392 - Chương 4: Intent, Broadcast và Notification
Trắc nghiệm PRM392 chương 4 - Giao tiếp giữa các thành phần: Intent tường minh và Intent ngầm định, action, data, extra và cách lấy dữ liệu ở Activity nhận; Intent là cấu trúc dữ liệu thụ động và những rủi ro bảo mật khi phát Intent; BroadcastReceiver, phương thức onReceive, broadcast hệ thống và broadcast tuỳ chỉnh, ordered broadcast, đăng ký và huỷ đăng ký receiver động; Notification, Notification Channel từ Android 8.0 và PendingIntent.
PRM392 - Chương 5: Service, luồng và xử lý bất đồng bộ
Trắc nghiệm PRM392 chương 5 - Xử lý nền trong Android: Service khởi chạy bằng startService so với Service ràng buộc bằng bindService, phương thức onCreate và onStartCommand cùng các giá trị trả về START_STICKY, IntentService và hàng đợi công việc; AsyncTask với doInBackground, onProgressUpdate và onPostExecute; luồng chính giao diện, rủi ro của lập trình đa luồng và lý do ứng dụng Android phải dùng bất đồng bộ khi truy cập tài nguyên chậm.
PRM392 - Chương 6: Lưu trữ dữ liệu và Content Provider
Trắc nghiệm PRM392 chương 6 - Lưu trữ dữ liệu: SharedPreferences cho cặp khoá và giá trị, Editor, commit và clear; SQLite với SQLiteOpenHelper, onCreate và onUpgrade, ContentValues, Cursor, phương thức query và execSQL, giao dịch; thư viện Room với Entity, DAO và Database cùng các annotation tiện lợi; bộ nhớ ngoài và trạng thái MEDIA_MOUNTED; Content Provider, cấu trúc Content URI, lớp Contract và chia sẻ dữ liệu giữa các ứng dụng.
PRM392 - Chương 7: RecyclerView và hiển thị danh sách
Trắc nghiệm PRM392 chương 7 - Hiển thị danh sách hiệu quả: RecyclerView và ưu thế tái sử dụng view so với ListView; ba phương thức bắt buộc của RecyclerView.Adapter gồm onCreateViewHolder, onBindViewHolder và getItemCount; vai trò của ViewHolder; các LayoutManager LinearLayoutManager, GridLayoutManager và StaggeredGridLayoutManager; thứ tự gán LayoutManager trước Adapter; hiển thị ảnh trong danh sách; Floating Context Menu và Contextual Action Mode.
PRM392 - Chương 8: Mạng, Retrofit và Google Maps
Trắc nghiệm PRM392 chương 8 - Kết nối mạng và bản đồ: lập trình Socket với ServerSocket, phương thức accept và connect, trình tự gọi hàm trong Socket API; gửi yêu cầu HTTP và quyền INTERNET; thư viện Retrofit với Converter và base URL, các annotation GET, POST, Body, Path và Query; Google Maps API với SupportMapFragment, OnMapReadyCallback, addMarker, addPolyline, moveCamera, clear và quyền truy cập vị trí ACCESS_FINE_LOCATION.
PRM392 - Chương 9: Quyền truy cập và kiến trúc ứng dụng
Trắc nghiệm PRM392 chương 9 - Quyền và kiến trúc: khai báo quyền trong AndroidManifest, phân biệt normal permission và dangerous permission, quy trình xin quyền lúc chạy từ Android 6.0, shouldShowRequestPermissionRationale; các mẫu kiến trúc MVC, MVP và MVVM, vai trò Activity như Controller, ưu thế của MVP và MVVM về kiểm thử và tách lớp, ViewModel và Data Binding; kiểm thử giao diện bằng Espresso và thư viện hỗ trợ AppCompat.
Bắt đầu một phiên học theo môn
Tiến độ của bạn sẽ luôn được tính toán và đồng bộ trực tiếp theo tổng số lượng câu hỏi mới nhất của môn học này.
Bạn cần đăng nhập để bắt đầu học từ ngân hàng câu hỏi và lưu tiến độ theo môn.
Đang tải phân bố độ khó.
Ngân hàng câu hỏi
Xem trước · Cuộn vô hạnTrong mô hình MVC (Model-View-Controller), Controller đóng vai trò là lớp trung gian giữa Model và View, chịu trách nhiệm xử lý các yêu cầu từ View và cập nhật Model. Trong Android, lớp tương tự như Controller là Activity. Activity là lớp chính của ứng dụng Android, chịu trách nhiệm quản lý vòng đời của ứng dụng, xử lý các sự kiện và cập nhật giao diện người dùng. Activity cũng có thể tương tác với các lớp khác như Service, BroadcastReceiver và ViewModel để thực hiện các tác vụ phức tạp hơn.
Trong lập trình di động, việc lưu trữ dữ liệu là một phần quan trọng. Có nhiều cách lưu trữ dữ liệu khác nhau, bao gồm Shared Preferences, Internal Storage, External Storage và SD Card. Tuy nhiên, không phải tất cả các cách lưu trữ đều cần có sự cho phép của người dùng. Cụ thể, Shared Preferences và Internal Storage không cần có sự cho phép của người dùng để lưu trữ dữ liệu. Shared Preferences là một cơ sở dữ liệu nhỏ gọn được sử dụng để lưu trữ các giá trị nhỏ như chuỗi, số nguyên, v.v. Internal Storage là bộ nhớ trong của thiết bị di động, nơi mà ứng dụng có thể lưu trữ dữ liệu của mình mà không cần có sự cho phép của người dùng. Điều này giúp ứng dụng có thể lưu trữ dữ liệu một cách nhanh chóng và dễ dàng mà không cần phải hỏi ý kiến của người dùng.
Trong kiến trúc MVC, logic kinh doanh nên được xử lý ở đâu? Để trả lời câu hỏi này, chúng ta cần hiểu rõ chức năng của từng thành phần trong kiến trúc MVC. View (Trình bày) chịu trách nhiệm hiển thị dữ liệu, Model (Mô hình) chịu trách nhiệm lưu trữ và xử lý dữ liệu, Controller (Quản lý) chịu trách nhiệm điều hướng và xử lý logic kinh doanh, còn Presenter (Trình bày viên) là một thành phần bổ sung trong kiến trúc MVP (Model-View-Presenter), có chức năng tương tự như Controller trong kiến trúc MVC. Tuy nhiên, trong kiến trúc MVC, logic kinh doanh nên được xử lý ở Controller, vì Controller là thành phần chịu trách nhiệm điều hướng và xử lý logic kinh doanh. Vì vậy, phương pháp nên tránh khi xử lý logic kinh doanh trong kiến trúc MVC là View.
Từ Android 6.0 trở lên, hệ điều hành đã thay đổi cách quản lý quyền truy cập (permission) của ứng dụng. Trước đây, ứng dụng có thể yêu cầu quyền truy cập mà không cần sự cho phép của người dùng. Tuy nhiên, từ Android 6.0, người dùng phải cho phép ứng dụng truy cập vào các quyền cụ thể. Điều này giúp tăng cường bảo mật và quyền riêng tư cho người dùng. Ngoài ra, ứng dụng cũng phải khai báo rõ ràng các quyền mà nó cần để hoạt động. Vì vậy, từ Android 6.0, component quản lý quyền truy cập (Permission) đã thay đổi đáng kể.
Các thư viện Jetpack có thể được sử dụng trong lớp dữ liệu là những thư viện giúp chúng ta quản lý dữ liệu một cách hiệu quả. Trong số các lựa chọn trên, Room là một thư viện quan trọng trong lớp dữ liệu. Room giúp chúng ta tạo ra cơ sở dữ liệu địa phương trên thiết bị di động và thực hiện các truy vấn cơ sở dữ liệu một cách hiệu quả. Ngoài ra, Room cũng hỗ trợ các tính năng như lưu trữ dữ liệu, truy vấn dữ liệu và cập nhật dữ liệu một cách tự động. Vì vậy, Room là một lựa chọn tốt cho lớp dữ liệu.
Bước đầu tiên trong quy trình xử lý quyền cho ứng dụng Android là gì? Để bắt đầu, bạn cần khai báo quyền trong tệp manifest.xml của ứng dụng. Tệp này chứa thông tin cơ bản về ứng dụng, bao gồm quyền cần thiết. Khi khai báo quyền, bạn cần chỉ định quyền đó có thể được sử dụng ở cấp độ nào: cấp độ ứng dụng (app), cấp độ hoạt động (activity) hoặc cấp độ dịch vụ (service). Sau khi khai báo quyền, bạn có thể yêu cầu quyền này khi ứng dụng được chạy.
Mục đích của việc thêm android.permission.INTERNET vào file AndroidManifest.xml là để cho phép ứng dụng của bạn truy cập internet và thực hiện các yêu cầu mạng. Điều này cho phép ứng dụng của bạn gửi yêu cầu đến các dịch vụ mạng, tải dữ liệu từ internet và thực hiện các hoạt động mạng khác. Nếu bạn không thêm quyền truy cập internet vào file AndroidManifest.xml, ứng dụng của bạn sẽ không thể thực hiện các yêu cầu mạng và sẽ không thể hoạt động đúng cách. Vì vậy, việc thêm android.permission.INTERNET vào file AndroidManifest.xml là rất quan trọng để đảm bảo ứng dụng của bạn có thể truy cập internet và thực hiện các yêu cầu mạng một cách hiệu quả.