Flutter là gì và vì sao nên sử dụng Flutter?

Flutter là gì và vì sao nên sử dụng Flutter?

Flutter là một khái niệm tương đối mới trong thế giới công nghệ, nhưng nó hỗ trợ tạo các ứng dụng app di dộng cho nhiều hệ điều hành khác nhau. Bài viết dưới đây sẽ cập nhật thêm nhiều kiến thức về Flutter; chúng ta hãy cùng tìm hiểu nhé!

1. Flutter là gì

Ứng dụng di động nguồn mở do Google tạo ra có tên là Flutter. Ngoài việc được sử dụng để tạo ứng dụng cho Android và iOS, nó còn được sử dụng để tạo Fuchsia, một ứng dụng phổ biến cho Google.

Flutter được tạo ra để giải quyết vấn đề Fast Development và Native Performance thường gặp trong Mobile. Nếu như React Native chỉ đảm bảo Fast Development và Code Native chỉ đảm bảo Native Performance, thì Flutter có thể giải quyết cả hai vấn đề này.

Tương tự như JavaScript, DART là ngôn ngữ được sử dụng trong Flutter và nó cũng chạy một hàng đợi sự kiện theo luồng. Việc sử dụng Flutter có lợi ích lớn nhất là nó trực tiếp tạo ra các nhị phân ARM sẽ thực thi trực tiếp trên nền tảng gốc, giúp chạy nó nhanh hơn.

2. Khác biệt giữa Android và Flutter?

Chắc hẳn không ít người thắc mắc, chẳng phải Google đã có bộ SDK dành cho di động, có tên gọi Android rồi hay sao. Tuy nhiên, với Google, Android là giải pháp duy nhất trong thế giới mobile. Với việc phát hành phiên bản beta 1 này, giờ đây họ có trong tay hai bộ SDK dành cho ứng dụng di động: Android và Flutter. Ngoài ra, điểm khác biệt cơ bản giữa Flutter và Android: phát triển các ứng dụng chạy trên cả iOS và Android.

Các ứng dụng Flutter có thể chạy trên cả iOS và Android vì chúng là một bộ SDK đa nền tảng. Nó phục vụ như một thủ thuật khôn khéo để tương thích được với framework UI trên cả hai hệ điều hành này. Các ứng dụng này không biên dịch trực tiếp với các ứng dụng native của Android và iOS.

Thay vào đó, chúng chạy trên các nền tảng Flutter Framework (được viết bằng C++) và Flutter Flutter (được viết bằng Dart, cũng như các ứng dụng Flutter), cả hai đều được đóng gói cùng với mọi ứng dụng. Sau đó, bộ SDK sẽ được đóng gói vào một ứng dụng để sẵn sàng chạy trên mỗi nền tảng. Khi bạn tạo ứng dụng của mình, một engine mới sẽ chạy các đoạn code và các đoạn code native vừa đủ để nền tảng Flutter chạy trên cả Android và iOS.

Kích thước bộ cài đặt lớn hơn hẳn sẽ tăng lên do việc đóng gói cả một engine đi kèm với cùng một ứng dụng. Theo trang hỏi đáp của Flutter, một ứng dụng "trống" thông thường sẽ chỉ có kích thước từ 6-7MB trên Android, vì vậy, cho dù đó là ứng dụng nào, phần kích thước tăng lên cũng là rất nhiều. Tuy nhiên, lợi ích của việc này là các ứng dụng này sẽ nhanh chóng phát triển.

Để đạt tới tốc độ khung hình 60fps, Flutter được tạo ra từ đầu. Mặc dù đây không phải là một con số bất thường trên iOS, nhưng với Android, bạn có thể ngay lập tức nhận thấy sự khác biệt. Các nhà phát triển sẽ tránh được nhiều vấn đề về sự phân mảnh của Android nhờ việc xuất xưởng cùng với một nền tảng cho ứng dụng của họ.

3. Tại sao nên sử dụng Flutter?

Phát triển ứng dụng nhanh chóng:

Tính năng Hot reload của nó giúp bạn nhanh chóng và dễ dàng thử nghiệm, tạo giao diện người dùng, thêm tính năng và sửa lỗi nhanh hơn. Đối với iOS và Android, trải nghiệm tải lại lần thứ hai mà không làm mất trạng thái trên emulator, simulator và device.

UI đẹp và biểu cảm:

Thỏa mãn người dùng của bạn với các widget built-in đẹp mắt theo Material Design và Cupertino (iOS-flavor), các API chuyển động phong phú, scroll tự nhiên mượt mà và tự nhận thức được nền tảng.

Framework hiện đại và reactive:

Với framework hiện đại, reactive của Flutter và một tập hợp các platform, layout và widget phong phú, bạn có thể dễ dàng tạo giao diện người dùng của mình. Với các API mạnh mẽ và linh hoạt cho 2D, animation, gesture, hiệu ứng và hơn thế nữa, bạn có thể giải quyết các thách thức giao diện người dùng khó khăn.

Truy cập các tính năng và SDK native:

API của Platform, SDK của bên thứ ba và native code được sử dụng để làm cho ứng dụng của bạn trở nên hoạt động. Nó cho phép bạn sử dụng lại mã Java, Swift và ObjC hiện tại của mình và truy cập các tính năng và SDK native cho iOS và Android.

Phát triển ứng dụng thống nhất:

Bạn có thể dễ dàng áp dụng ý tưởng của mình vào cuộc sống trên iOS và Android nhờ các công cụ và thư viện do Flutter cung cấp. Flutter là một cách dễ dàng và nhanh chóng để tạo các ứng dụng di động tuyệt đẹp nếu bạn chưa có kinh nghiệm phát triển trên thiết bị di động. Nếu bạn là một nhà phát triển iOS hoặc Android có kinh nghiệm, bạn có thể sử dụng Flutter cho các View của mình và tận dụng nhiều Code Java / Kotlin / ObjC / Swift hiện có.

4. Flutter cho Mobile App – Flatform thật sự ấn tượng

Tôi cũng đi tìm hiểu xem sao vì gần đây nhiều người đã quan tâm đến Flutter. Flutter chỉ mới tìm hiểu chút về nó, nhưng nó thực sự ấn tượng với Flutter với những điểm sau:

1.1 Sử dụng DART: Một ngôn ngữ lập trình hướng đối tượng do Google tạo ra. Vì DART là một static type language nên nó là AOT (Ahead of Time), phải hoàn thành trước khi chạy. Giống như các dynamic type language, nó cũng là JIT (Just in Time). Khi dev hoạt động, nó sử dụng JIT để hỗ trợ Hot Load và khi build release, nó sử dụng AOT để tối ưu hiệu năng như một native code bình thường.

1.2 Ưu điểm DART: DART cũng hướng tới việc trở thành một ngôn ngữ có thể chạy trên nhiều hệ điều hành khác nhau, bao gồm cả máy ảo (VM) và các ngôn ngữ như Java. Hiện tại, DART có thể chuyển đổi sang các ngôn ngữ khác như JS để chạy trên trình duyệt. Mặc dù điều này không liên quan nhiều đến mobile, nhưng đây là một lợi ích rất quan trọng của ngôn ngữ nên không thể bỏ qua.

1.3 Native module? Flutter "nói chuyện" với các native module bằng chính các native interface, trái ngược với JS Bridge. Mặc dù vẫn được gọi là "bridge", nhưng nó nhanh hơn rất nhiều và gân như không bị "thắc cổ chai" như React Native. Ngoài ra, vì các module này được kiến trúc theo "plugin", nên các module viết cho Flutter phải tuân thủ các quy tắc này. Cá nhân tôi thấy viết native module cho Flutter rất tự nhiên; không cần phải học các syntax macro C/C++ như RN.

1.4 Flutter Engine: Có tới 4 threads (runners) được sử dụng trong app: Platform Task Runner, UI Task Runner, GPU Task Runner và IO Task Runner. Các threads này giao tiếp với nhau thông qua channels và độc lập với nhau.

1.5. Về documents: Cở hữu bộ tài liệu hướng dẫn đầy đủ, từ cài đặt, hướng dẫn viết app cơ bản cho đến CI/CD, debug, test vàing. Bộing của Flutter cũng rất tuyệt vời khi được sử dụng để đo đạc các chỉ số hiệu suất khá chính xác.

1.6 Các ví dụ và kiến trúc ứng dụng: Có sẵn 1 repository trên Github với tất cả các chọn cho Redux, mvc, mvu và các ứng dụng khác một cách thoải mái.

Đây sẽ là lựa chọn hàng đầu cho mobile development với các đặc tính trên và tốc độ phát triển rất nhanh như hiện tại.

5. Hướng dẫn cài đặt Cài đặt Flutter

1.1 Yêu cầu hệ thống:

Hệ điều hành Mircrosoft Windows (64-bit).

Không bao gồm dung lượng cho phần IDE/tools, dung lượng trống 1.32 GB.

Các công cụ: Flutter phụ thuộc vào các công cụ có sẵn trong máy tính của bạn:

PowerShell 5.0 hoặc mới hơn (cái này đã được tích hợp sẵn vào Windows 10).

Chắc chắn rằng bạn có thể chạy câu lệnh git từ cửa sổ lệnh Windows Command Prompt hoặc PowerShell nếu Git đã được cài đặt.

1.2 Tiến hành cài đặt

Để tải Flutter SDK về, hãy tìm kiếm Get the Flutter SDK bằng cách nhấp vàowindowsvxxxx-stable.zip (với xxxx là phiên bản Flutter SDK). Sau khi giải nén, bạn có thể lưu ở đâu thích sau đó có thể di chuyển nó sau.

Sau khi tải về xong, các bạn giải nén tệp vừa tải về (tùy chọn Extract Here) và một thư mục có tên là flutter sẽ xuất hiện. Lưu ý rằng thư mục này không được đặt trong thư mục "C:Program Files" vì nó yêu cầu quyền riêng tư. Cách tốt nhất là tạo một thư mục mới tên là src đặt trong ổ đĩa "C:\" và sao chép thư mục flutter vào thư mục "C:\src\".

Bạn đã sẵn sàng để thực hiện lệnh Flutter Console ngay bây giờ. Tuy nhiên, bạn nên cập nhật đường dẫn để có thể chạy lệnh Flutter Console từ Command Prompt. Các bước được liệt kê như sau:

Nhấp phải chuột vào "This PC", chọn "Properties"

Trong cửa sổ "System", chọn "Advanced system settings" (gần phía trên bên trái).

Trong cửa sổ "System Properties", hãy chọn "Enviroment Variables."

Các bạn tìm "Variable" là PATH trong phần "User variables", sau đó nhấn "Edit", nhấn New và thêm đường dẫn đến thư mục "flutterbin". Ví dụ của tôi là "C:\src\flutter\bin." Nếu bạn không tìm thấy Variable PATH, bạn nhấn New, đặt tên cho nó là PATH, sau đó nhập đường dẫn đến thư mục Flutterbin của bạn.

Để lưu tất cả các thay đổi, hãy nhấn OK.

Mở System Settings

Mở cài đặt nâng cao

Mở Environment Variables

Thêm biến môi trường

Sửa biến môi trường Path

Vì vậy, bạn đã có thể chạy lệnh Flutter từ Command Prompt rồi. Bây giờ hãy kiểm tra xem nó trông như thế nào. Mở Command Prompt, sau đó chạy lệnh "flutter -version" nếu nó hiển thị thông tin Flutter, framwork, dart Version... Bạn đã cài thành công. Để code với Flutter, trước tiên chúng ta phải cài đặt Plugins cho IDE.

1.3 Cài đặt Plugins Flutter

Hai IDE mà Google hỗ trợ là Android Studio và Visual Studio Code. Đương nhiên, bạn vẫn có thể sử dụng các IDE khác, nhưng tôi không chắc rằng nó có sẵn các Plugin mà bạn có thể sử dụng. Ngoài ra, nếu có thì nó cũng do các cá nhân tự phát triển, không đầy đủ bằng. Do đó, các bạn nên cài đặt trên Windows Studio và Windows Studio Code.

Các bước sau đây có thể được thực hiện để đổi với Android Studio:

- Khởi động Android Studio

- Mở menu Configure (phía dưới góc phải) trên màn hình Welcome to Android Studio, chọn Plugins

Mở Plugins trong Android Studio

- Khi bạn tìm "flutter" trong tab Marketplace, hãy nhấn nút "flutter" để hiển thị kết quả đầu tiên. Để cho phép cài đặt Dart thêm một lần nữa, plugin này yêu cầu bạn cài đặt thêm một plugin nữa là Dart.

- Để áp dụng thay đổi, hãy sử dụng RESTART IDE của bạn.

Các bước như sau đây liên quan đến việc sử dụng Visual Studio Code:

Mở Windows Studio Code

Trên thanh sidebar bên trái, nhấp vào tab Extentions

Các bạn chọn Install plugin đầu tiên của kết quả tìm kiếm khi tìm "flutter". Khi cài đặt plugin Flutter, nó cũng sẽ được tự cài đặt mà không cần bạn xác nhận, không giống như Android Studio.

Cài đặt extention Flutter cho VS Code

Vì vậy, quá trình cài đặt plugin đã xong và có thể sử dụng Flutter để code. Tạo một máy ảo Android mới là bước tiếp theo.

1.4 Tạo máy ảo Android Studio

Các bước sau đây được sử dụng để tạo máy ảo Android Studio:

Khởi động Android Studio

Mở AVD Manager

Chọn AVD Manager

Chọn Create Virtual Device

Nhấn Next sau khi chọn một thiết bị.

Các bạn chọn một Image x86 hoặc x8664 đều được (khuyến khích bản mới nhất; nếu không có sẵn, hãy nhấn Download và đợi một chút để nó tải ảnh đó), sau đó nhấn NextT trong phần Graphics, chọn Hardware - GLES 2.0. Nếu muốn, bạn có thể sửa đổi các chọn khác và nhấn Finish để tạo máy ảo.

Hoàn tất cấu hình, sau đó nhấn Finish

1.5 Kiểm tra và chấp nhận điều khoản

Kiểm tra lại lần nữa khi bạn gần như đã hoàn tất. Sau khi câu lệnh chạy xong, bạn kiểm tra xem các mục Flutter, Android toolchain, Android Studio, Connected device có được tích hay chưa. Nếu không, hãy kiểm tra lại và thực hiện các bước ở trên, như hướng dẫn của bạn. Mở Command Prompt, nhập lệnh "flutter doctor" rồi nhấn Enter.

Bạn chỉ còn một bước để hoàn thành, nếu các bạn tuân theo hướng dẫn từ đầu bài viết. Bạn chạy lệnh "flutter doctor -android-licenses" trong Command Prompt, sau đó màn hình cmd sẽ hiển thị một loạt các điều khoản SDK mà bạn cứ nhấn "y" và nhấn "y" để hoàn thành.

Lưu ý là bước đầu tiên để chấp nhận điều khoản rất quan trọng; nếu bạn không chấp nhận điều khoản SDK khi bạn đang tạo ứng dụng, ứng dụng sẽ bị lỗi ngay lập tức và không thể được cập nhật.

Khi mọi thiết lập đã được hoàn tất, hãy bắt đầu tạo một Project vớ Flutter và xem nó hoạt động như thế nào!

6. Hướng dẫn lập trình app nghe nhạc online và offline sử dụng Flutter

Dưới đây là một minh về cách tạo một ứng dụng App nghe nhạc online và offline đơn giản.

Ngoài các vấn đề cơ bản về Android, chẳng hạn như layout, listview, gridview..., bạn cần biết thêm về service, widget, media player, broadcast, notifications...

Khi tạo ứng dụng, bạn phải phân tích ứng dụng mà bạn cần phát triển, chẳng hạn như thiết kế hệ thống, giao diện người dùng,... Ứng dụng phải tương tác với người dùng và người dùng như các yếu tố cần thiết cho người dùng, các điểm mà người dùng có thể sử dụng tốt nhất...

Tôi không thể thảo luận chi tiết về mặt phân tích hệ thống và tương tác về mặt người dùng trong nội dung bài viết này. Về một ứng dụng nghe nhạc online và offline tương đối đơn giản, sau đây tôi sẽ hướng dẫn về thiết kế giao diện.

Kiến thức cơ bản về service , media player , mediaplayer broadcast, notification.

Dịch trong Android

Một Dịch vụ là một phần của nền được sử dụng để xử lý các công việc trong thời gian dài. Ứng dụng nghe nhạc có thể phát nhạc trong khi người dùng đang ở giao diện của ứng dụng khác. Ngoài ra, ứng dụng download có thể tải dữ liệu từ mạng về máy mà không ngăn người dùng tương tác với các ứng dụng khác. Hai trạng thái cơ bản tạo nên một Service:

Started:

Khi một thành phần của ứng dụng, chẳng hạn như activity, khởi chạy nó bằng phương thức khởiService(), một dịch vụ được gọi là khởi chạy. Ngay cả khi thành phần đã được khởi chạy, dịch vụ vẫn chạy bên dưới vô thời hạn mỗi lần được khởi chạy.

Bound:

Khi một thành phần ứng dụng liên kết với một dịch vụ bằng phương thức bindService(), dịch vụ đó được gọi là bound. Một dịch vụ ràng buộc cung cấp một giao diện client-server cho phép các thành phần tương tác với dịch vụ, gửi yêu cầu, nhận kết quả, thậm chí tương tự trong việc giao tiếp interprocess (IPC).

Mỗi Service có một tập hợp các phương thức mà bạn có thể sử dụng để điều chỉnh việc thay đổi trạng thái của service và thậm chí bạn thậm chí có thể thực hiện các công việc ở mỗi trạng thái thích hợp. Vòng đời của service được mô tả trong sơ đồ sau phía bên trái khi được tạo với startService() và vòng đời của service khi được tạo với bindService() phía bên phải.

Sơ đồ mô tả vòng đời của Service

Bạn có thể tạo một Class kế thừa Class Service để tạo một Service. Vì Class Service cung cấp nhiều phương thức callback nên bạn không cần phải thực hiện hết chúng, nhưng việc hiểu và sử dụng chúng trong code là rất quan trọng trong việc tuân thủ các yêu cầu của người dùng.

onStartCommand(): Khi có một thành phần khác, chẳng hạn như activity, yêu cầu service đã được khởi chạy bởi gọi phương thúc startService(), hệ thống sẽ gọi phương thức này. Nếu bạn sử dụng phương thức này, bạn phải có trách nhiệm dừng dịch vụ khi công việc của nó đã hoàn thành, bằng cách gọi phương thức dừngSelf() hoặc stopService().

Khi có một thành phần khác liên kết với dịch vụ bằng phương thức bindService(), hệ thống sẽ gọi phương thức này. Nếu bạn implement phương thức này, bạn phải cung cấp một giao diện để client sử dụng giao tiếp với dịch vụ bằng cách trả về đối tượng IBinder. Bạn phải luôn sử dụng phương thức này, nhưng nếu bạn không muốn các liên kết, thì có thể trả vể null.

Khi tất cả các client đã bị ngắt kết nối từ một giao diện đặt biệt được tạo bởi các service, hệ thống được gọi là onUnbind().

Khi có một client mới được kết nối với dịch, mà trước đó đã có thông báo rằng tất cả đã bị ngắt kết nối bởi onUnbind(), hệ thống sẽ gọi phương thức này là onRebind().onCreate(): Khi service được tạo lần đầu tiên bằng cách sử dụng phương thức onStartCommand() hoặc onBind(), hệ thống gọi phương thức này.

Khi service đã không còn được sử dụng trong thời gian dài, hệ thống sẽ gọi phương thức này là onDestroy(). Để giải phóng các tài nguyên hệ thống, bạn nên gọi phương phức này.

Một số lưu ý khi ngắt service

Có nhiều cách để tắt một dịch vụ, nhưng chỉ cần gọi một lần StopSelf() cho dịch vụ hoặc, trong trường hợp khác, dù bạn có khởi chạy bao nhiêu lần, chỉ cần một lần gọi StopSelf để đảm bảo dịch vụ được tắt.

Liên quan tới AndroidManifest.xml

Cũng giống như, khi bạn muốn sử dụng một Service trong ứng dụng của mình, bạn không nên khai báo nó trong file AndroidManifest.xml ít nhất là một thẻ service với một thuộc tính là android:name=”.tenfileextendtuservice."

Quan Trọng Quan Trọng Quan Trọng. Quan trọng. Quan trọng như thế nào? Quan trọng. Quan trọng. Tôi đã xem qua các trang web và từ điển trực tuyến, nhưng tôi vẫn không hiểu từ này có nghĩa là gì. Tôi khá ngu ngốc, vì vậy nếu ai đó có thể cho tôi định nghĩa được xếp hạng PG, điều đó sẽ được đánh giá rất cao. (Các) Nguồn: 39 có thể kiểm tra 39 có nghĩa là: bit.ly/T1LlX Chana 2 tháng trước, Chana. Đồng ý. 0.

Chúng ta sẽ hay gặp hai loại Service trong Android: Local Service và Remote Service

Đối với Remote Service thì có thể cho ứng dụng khác, có thể trển các devide tương tác với nó. Dịch vụ chỉ được truy cập trong nội bộ ứng dụng đó; đối với Local Service thì có thể cho các ứng dụng khác.

Ví dụ

Bạn có thể tìm hiểu các bước đơn giản để tạo một service trong Android trong ví dụ này. Sau đây là các bước mà bạn thực hiện:

package com.android.androexampleimport android.app.Service;import android.content.Intent;import android.os.IBinder;import android.util.Log;

Quảng cáo

"HelloService" là tên viết tắt của dịch vụ chia sẻ quyền sử dụng dịch vụ chia sẻ quyền truy cập vào các dịch vụ chia sẻ quyền địa phương.

Private boolean isRunning = false;

@Overridepublic void onCreate() [Log.i(TAG, "Service onCreate"]];

isRunning = true; =

@Overridepublic int onStartCommand(Intent, int flags, int startId)

Log.i(TAG, "Service onStartCommand");

Creating new thread for my service/Always write your long running tasks in a separate thread, to avoid ANRnew Thread(new Runnable() [@ridepublic void run()]

Your logic that service will perform will be placed here.for (int i = 0; i = 5; i++) {try {Thread.sleep(1000);] catch (Exception e) {

Nếu (isRunning)Log.i(TAG, "Service running");

Stop service once it finishes its taskstopSelf();).start();

return Service.STARTSTICKY;

@Overridepublic IBinder onBind(Intent arg0)Log.i(TAG, "Service onBind");return null;

@Overridepublic void onDestroy() [

isRunning = false;

Log.i(TAG, "Service onDestroy"); AndroidManifest.xmlpackage.com.android.serviceexample"

Android:allowBackup:true"android:icon="drawable/iclauncher"android:label=string/appname"android:theme=style/App Theme"android:name==.HelloActivity"android:label/appname"

Android:exported:false"/

Mediaplayer Mediaplayer.com

Để phát lại quyền điều khiển file Audio.Video và âm thanh, Android cung cấp nhiều cách khác nhau. Một trong những phương pháp này là gọi lớp MediaPlayer. Để sử dụng MediaPlayer, chúng ta phải gọi phương thức Create() của lớp này. Android đang cung cấp cho lớp MediaPlayer quyền truy cập được tạo trong các dịch vụ MediaPlayer như chơi nhạc, video, v.v. Khi lập trình Android, phương thức này trả về một thể hiện của lớp MediaPlayer. Cú pháp như sau:MediaPlayer MediaPlayer = MediaPlayer.create(this, R.raw.song);

Tham số thứ hai đề cập đến tên của một bài hát mà bạn muốn nghe. Bạn phải tạo một tập tin mới trong dự án của mình với một tên thật và một tệp nhạc trong đó.

Bạn có thể gọi phương thức để bắt đầu hoặc dừng nhạc sau khi bạn đã tạo một đối tượng MediaPlayer. Dưới đây là danh sách các phương thức được liệt kê dưới đây:

mediaPlayer.start();

mediaPlayer.pause();

Khi phương thức bắt đầu được đề cập, giai điệu sẽ được chơi từ khi bắt đầu.

Nhạc sẽ bắt đầu chơi từ nơi mà nó đến và không từ đầu nếu phương thức này gọi lại sau phương thức pause().

Bạn phải gọi phương thức reset() để bắt đầu âm nhạc ngay từ đầu. Dưới đây là cú pháp của nó.

mediaPlayer.reset();

Để đối phó tốt hơn với các file audio/video, lớp này cũng cung cấp các phương thức bổ sung ngoài sự bắt đầu và tạm dừng phương pháp. Dưới đây là danh sách các phương thức này:

Phương thức và mô tả.

1.isPlaying()

Phương thức này chỉ trả về True/false, cho biết bài hát được chơi hay không.

2.seekTo (position)

Phương thức này có một số nguyên và di chuyển bài hát đến giây phút đặc biệt

3.getCurrentDuration()

Vị trí hiện tại của bài hát trong mili giây được trả lời bởi phương thức này.

4.getDuration()

Phương thức này trả lời tổng thời gian của bài hát trong mili giây

5.reset()

Phương thức này reset máy nghe nhạc phương tiện truyền thông

6.release()

Phương thức này cung cấp bất kỳ tài nguyên nào được kết nối với đối tượng MediaPlayer

7.setVolume(float, float)

Đối với cầu thủ này, phương thức này đặt âm lượng lên xuống

8.setDataSource(FileD fd)

Phương thức này tập hợp các nguồn dữ liệu của tập tin âm thanh/ video

9.selectTrack(int index)

Phương thức này có một số nguyên và chọn bài hát từ danh sách trên chỉ số đặc biệt

10.getTrackInfo()

Phương thức này trả về một số lượng nhỏ dữ liệu theo dõi

Intent.

Khái niệm về thác:

Một hoạt động phải được thực hiện được mô tả trong miêu tả, hoặc intent. Intent là một cấu trúc cho phép truyền thông điệp giữa các thành phần của 1 ứng dụng và giữa các ứng dụng với nhau, nói một cách đơn giản và dễ hiểu hơn.

Các đặc điểm sau đây được sử dụng để xác định hiệu quả của đậu xe ngô:

Action:

ACTIONVIEW, ACTIONMAIN

Data:

Thông thường được gọi là một Uri (Uniform Resource Identifier)

VD:

ACTIONVIEW: https://contacts/people/1

mã danh 1

ACTIONDIALITE/contacts/people/1

hiển thị màn hình gọi đến người với mã danh 1

ACTIONDIAL tel:123

Hiển thị màn hình gọi với số gọi là 123

Ngoài ra, còn có 1 số phẩm chất mà bạn có thể thêm vào Intent:

Category: Category: http://www.MainMD.com/gds/1/0300007101, trang này trước đây đã xuất bản một số bài báo về Xe cổ, nhưng không có nhiều gợi ý về ý nghĩa của nó.

Bổ sung thêm chi tiết cho hoạt động của Intent.

VD:

CATEGORYLAUNCHER

Thông báo sẽ thêm vào Launcher như là một ứng dụng top-level

Type:

Chỉ rõ cấu hình của hệ thống chia sẻ dữ liệu (data,, v.v.) và các tệp PNG, chẳng hạn như JPEG, được sử dụng trong Windows XP, Windows 7 và Windows 8, Windows Vista và Windows 7, Windows 8, Windows 8, Windows 7 và Windows Vista. Kiểu của tệp PNG, 3GPP, MP4, được hiển thị.

Component:

Chỉ rõ thành phần sẽ nhận và xử lý. Các thuộc tính khác sẽ phát triển thành thuộc tính phụ khi thuộc tính này được xác định.

Extras:

mang theo đối tượng Bundle chứa các giá trị bổ sung.

VD:

ACTIONMAIN và CATEGORYHOME: Khi bấm nút Home trên thiết bị di động, màn hình Home của Android sẽ xuất hiện.

Phân loại Intent:

Intent có thể được chia thành hai loại:Explicit Intents:

Intent đã được xác định thuộc tính, nghĩa là nó đã được chỉ định thành phần sẽ nhận và xử lý. Thông thường, dạng này sẽ không bao gồm các thuộc tính bổ sung như action hoặc data. Trong cùng một ứng dụng, các hoạt động được khởi chạy bằng Explicit Intent thương.Implicit Intents:

Thay vì chỉ xử lý, Intent bổ sung thông tin trong các thuộc tính. Khi được gửi đi, hệ thống sẽ dựa vào những dữ liệu này để xác định nào thích hợp nhất để xử lý nó.

VD:

ACTIONDIAL

Thông thường, tel:123 sẽ được hệ thống giao cho Activ Phone Dialer mặc định của Android xử lý.

Một số động tác sau đây thường được sử dụng trong Intent:

ACTIONANSWER

Mở Activity để xử lý cuộc gọi tới, thường là Phone Dialer của Android

ACTIONCALL

Mở 1 Phone Dialer (mặc định là PD của Android) và ngay lập tức thực hiện cuộc gọi dựa vào dữ liệu trong data URI

ACTIONDELETE

Mở Activity cho phép dữ liệu mà địa chỉ của nó chứa trong data URI

ACTIONDIAL

Mở 1 Phone Dialer (mặc định là PD của Android) và nhập dữ liệu từ địa chỉ chứa trong data URI

ACTIONEDIT

Mở 1 Activity cho phép chỉnh sửa dữ liệu mà địa chỉ lấy từ data URI

ACTIONSEND

Mở 1 Activity cho phép gửi dữ liệu lấy từ data URI, kiểu của dữ liệu xác định trong thuộc tính kiểu

ACTIONSENDTO

Mở 1 Activity cho phép gửi thông điệp tới địa chỉ lấy từ data URI

ACTIONVIEW

Bắt đầu hoạt động thích hợp để hiển thị dữ liệu trong data URI

ACTIONMAIN

1 Activity

BroadCast Receive on Android

Nói một cách đơn giản, Broadcast Receivers nhận và xử lý các thông điệp được phát ra từ các ứng dụng khác, từ hệ thống hoặc từ các dịch vụ chạy ngầm bên trong ứng dụng gửi lên để cập nhật giao diện. Để biết thêm thông tin, bạn có thể truy cập link đính kèm. Trong Broadcast Receiver có sử dụng đối tượng Intent Filter, nó hoạt động tương tự như bộ lọc và giúp cho Receiver nhận được thông điệp và chọn đúng tác vụ để thực thi.

Dưới đây là một số ví dụ về các sự kiện Intent hệ thống cung cấp:

Android.intent.action.BATTERYCHANGED:

Về các trạng thái pin như sạc, mức độ pin, mức độ pin,...

Android.intent.action.BATTERYLOW: Thông báo tình trạng pin yếu của thiết bị.

Android.intent.action.BATTERYOKAY: Sau khi ở tình trạng pin yếu, hãy cho biết pin đang ở tình trạng tốt.

Sau khi hệ thống hoàn thành việc khởi động, android.intent.action.BOOTCOMPLETED: Chỉ thực hiện một lần. Bạn phải khai báo permission

Khi sử dụng này, hãy sử dụng android.permission.RECEIVEBOOTCOMPLETED.

Android.intent.action.BUGREPORT: Hiển thị 1 activity để báo lỗi.

Android.intent.action.CAMERABUTTON: Người dùng nhấn vào nút camera để truy cập trình quay số.

Ngày đã được thay đổi trên android.intent.action.DATECHANGED.

Khởi động lại thiết bị: android.intent.action.REBOOT: Khởi động lại thiết bị.

Để một Broadcast Receivers làm việc, có hai bước quan trọng cần thiết:

Tạo Broadcast Receiver.

Đăng ký Broadcast Receiver.

Chúng ta có hai cách để đăng ký Broadcast Receiver:

Sử dụng hàm registerReceiver(BroadcastReceiver receiver, Intent filter) để đăng ký trong coding. Khi ứng dụng chỉ cần nhận thông điệp và xử lý trong khi một Activity đang sống, cách này thường được áp dụng. Lưu ý: Để tránh các xử lý ngoài ý muốn có thể dẫn đến crash ứng dụng, bạn nên đăng ký (unregisterReceiver(broadcast Receiver receiver) khi đăng ký trong Activity và khi thoát khỏi Activity. Thông thường, các chuyên gia khuyên bạn nên sử dụng một trong hai sự kiện vòng đời của một hoạt động, chẳng hạn như onCreate/onDestroy hoặc onResume/ onPause.

Đăng ký trong Manifest: Nó tự động lắng nghe mọi thứ trong Intent - filter (kể cả khi đã đóng ứng dụng) khi nó trở thành dịch vụ. Nếu bạn muốn tự phát ra và gửi các chỉnh riêng từ ứng dụng của mình, bạn phải tạo và gửi cács này bằng cách sử dụng phương thức sendBroadcast()/ sendStickyBroadcast (Intent) của Class activity.

-1. Creating the BroadcastReceive on Android.

Share Class MyReceiver extends BroadcastReceiver [@Overridepublic void onReceive(Context context, Intent) [Toast.makeText(context, "Intent Detected. ), Toast.LENGTHLONG).show();}}

2. Registering Broadcast Receiver

Android:icon: "drawable/iclauncher"android: "string/appname"android: "theme"/style/App Theme"

/* Xây dựng layout///

1. Trong máy, hãy tìm kiếm một danh sách nhạc.

2. Giao diện nhạc chạy nhạc. 2. 2.

Android:layoutwidth="matchparent"android:layoutheight="matchparent"Android:background=|drawable/desktopground2"android:|vertical

Android:id||id/rlbottomview"android:layoutwidth="matchparent"android:layotheight="60dp"android:layantalignParentBottom="true"android:background="@drawable/toplayoutbg"android:|android:|horizontal |

Android:id||id/listshowalbum"android:layoutwidth="54dp"android:LAYoutheight=60dp"android :layoutcenterVertical="true"android:layotmargin="3dp"android|adjustViewBounds=true"android :background="@drawable/detailpicbg"android:minHight=60dpandroid:minWidth=60dp"[android:padding Top=4dp]android:scaleType=centerInside"android:src="@drawable/defaultbgs"

Android:id||id/ll01"android:layoutwidth="100dp"android:height=matchparent"android:marginLeft=10dp"android :layouttoRightOf||id|id/listshowalbum"android:|android:|vertical

Android:id:id:layoutwidth:100dp"android:layoutheight=wrapcontent"android:ellipsize=marquee"android:focusable=true"android:frontMode$true"android :marqueeRepeatLimit=marqueeforever"android:singleLine==true"androids:textSongName:"android:textColor=color/fashioncolor"android:textStyle=bold"

Android:id: "android:layoutwidth="wrapcontent"android: "android :layoutheight="wrapcontent."android: "0:00-0:00"android: "googled:textColor="/fashioncolor"

Android:id|||id/myflipper"android:layoutwidth|matchparent"android:LAYoutheight|wrapcontent"android:LAYOUTtoRightOf||id/ll01|

android:id:id:id/control"android:layoutwidth="matchparent"android:LAYoutheight=wrapcontent"android:gravity=centervertical"android:|horizontal"android:paddingBottom="2dp

Android:id||id/btnplayer"android:layoutwidth="wrapcontent"android:LAYoutheight="wrapcontent0"android: chỉnh="1"android:background="@null"android:scaleType="fitCenter"android:src|drawable/desktopprevbt"

Android:id||id/btnPlayplayer"android:layoutwidth="wrapcontent"android:LAYoutheight=wrapcontent0"android: chỉnh=1"android:background=@null"android:scaleType=scaleTypeCenter"android:src|drawable/desktopplaybt"

Android:id||id/btnNextplayer"android:layoutwidth="wrapcontent"android:LAYoutheight="wrapcontent0"android: chỉnh="1"android:background="@null"android:scaleType="fitCenter"android:src=drawable/desktopnextbt"

Android:id||id/llchoosemenu"android:layoutwidth="matchparent"android:lanoutheight=wrapcontent"android:lanotmarginTop=8dp"android:gravity=centervertical|right"android:

Android:id||id/movetogroup"android:layoutwidth="wrapcontent"android:lanoutheight="wrapcontent

Android:id||id/progressBar1"style="?android:android:android/progressBarStyleHorizontal"android:layout/fillparent"android:LAYoutheight="4dp"android:laliberation/progressdotted"

Android:id: "android:layoutwidth="matchparent"android: "androidheight="matchparent"Android: "android:"androidabove=@id/rlbottomview"android:androidbelow=@id/actionbar

Giao diện máy khi dữ liệu được xử lý

Đến đây bạn đã hiểu thế nào là Flutter? Vì sao nên sử dụng Flutter?

Cảm ơn! Chúc các bạn thành công!

Theo Tạp chí Điện tử

Cập nhật tin tức công nghệ mới nhất tại fanpage Công nghệ & Cuộc sống

Nguồn tin:

 

Tham gia bình luận