Thứ Ba, 30 tháng 10, 2018

Android - Hướng dẫn NFC

NFC là viết tắt của Near Field Communication , và như tên ngụ ý nó cung cấp một cơ chế truyền thông không dây giữa hai thiết bị tương thích. NFC là một công nghệ không dây tầm ngắn có phạm vi từ 4cm trở xuống cho hai thiết bị để chia sẻ dữ liệu.

Làm thế nào nó hoạt động

Giống như Bluetooth và WiFi cũng như tất cả các tín hiệu không dây khác, NFC hoạt động theo nguyên tắc gửi thông tin qua sóng vô tuyến. Thông qua dữ liệu NFC được gửi qua cảm ứng điện từ giữa hai thiết bị.

Học lập trình Android cơ bản
Học lập trình Android cơ bản
NFC hoạt động trên cơ sở thẻ, cho phép bạn chia sẻ một số lượng dữ liệu giữa thẻ NFC và thiết bị hỗ trợ Android hoặc giữa hai thiết bị hỗ trợ Android. Thẻ có nhiều tập hợp phức tạp khác nhau. Dữ liệu được lưu trữ trong thẻ có thể được viết bằng nhiều định dạng khác nhau, nhưng API Android dựa trên tiêu chuẩn NFC được gọi là Định dạng trao đổi dữ liệu NFC (NDEF). .

Tần số truyền dữ liệu qua NFC là 13,56 megahertz và dữ liệu có thể được gửi ở 106, 212 hoặc 424 kilobits mỗi giây, đủ nhanh cho một loạt dữ liệu chuyển từ chi tiết liên lạc sang trao đổi hình ảnh, bài hát và video.

Các thiết bị hỗ trợ Android có hỗ trợ NFC theo ba chế độ hoạt động chính

Ba chế độ hoạt động

Chế độ đọc / ghi - Cho phép thiết bị NFC đọc hoặc ghi các thẻ NFC thụ động.

Chế độ P2P - Chế độ này cho phép thiết bị NFC trao đổi dữ liệu với các đồng nghiệp NFC khác.

Chế độ mô phỏng thẻ - Nó cho phép thiết bị NFC hoạt động như một thẻ NFC, vì vậy nó có thể được truy cập bởi một đầu đọc NFC bên ngoài.

Cách hoạt động với Android

Để có quyền truy cập Phần cứng NFC, hãy thêm quyền sau vào tệp Android.Manifest của bạn.
<uses-sdk android:minSdkVersion="10"/>

Điều đầu tiên cần lưu ý là không phải tất cả các thiết bị hỗ trợ Android đều cung cấp công nghệ NFC.

Vì vậy, để đảm bảo rằng ứng dụng của bạn hiển thị trong Google play chỉ cho những thiết bị có Phần cứng NFC, hãy thêm dòng sau vào tệp Android.Manifest của bạn .
<uses-feature android:name="android.hardware.nfc" android:required="true"/>
Android cung cấp gói android.nfc để liên lạc với một thiết bị khác. Gói này chứa các lớp sau -
Sr.NoLớp học & Mô tả
1NdefMessage

Nó đại diện cho một Thông điệp NDEF bất biến.
2NdefRecord

Nó đại diện cho một bản ghi NDEF bất biến.
3NfcAdapter

Nó đại diện cho bộ điều hợp NFC cục bộ.
4
NfcEvent

Nó kết thúc tốt đẹp thông tin liên quan đến bất kỳ sự kiện NFC nào.
5NfcManager
Nó là một trình quản lý cấp cao được sử dụng để có được một cá thể của một NfcAdapter.
6Nhãn
Nó đại diện cho một thẻ NFC đã được phát hiện.
Hệ thống thẻ NFC hoạt động trong Android với sự trợ giúp của một số bộ lọc ý định được liệt kê dưới đây:

Sr.NoBộ lọc & tính năng
1ACTION_NDEF_DISCOVERED

Mục đích này được sử dụng để bắt đầu Hoạt động khi thẻ chứa tải trọng NDEF.
2ACTION_TECH_DISCOVERED

Mục đích này được sử dụng để bắt đầu một hoạt động nếu thẻ không chứa dữ liệu NDEF, nhưng là của công nghệ đã biết.
3ACTION_TAG_DISCOVERED

Mục đích này được bắt đầu nếu không có hoạt động nào xử lý ACTION_NDEF_DISCOVERED hoặc ACTION_TECH_DISCOVERED ý định.
Để mã hóa một ứng dụng sử dụng công nghệ NFC rất phức tạp, do đó, đừng sử dụng nó trong ứng dụng của bạn trừ khi cần thiết. 

Việc sử dụng NFC không phổ biến trong các thiết bị nhưng nó đang trở nên phổ biến. Hãy xem tương lai của công nghệ này là gì

Ứng dụng trong tương lai

Với công nghệ này đang phát triển từng ngày và do giới thiệu các hệ thống thanh toán ít liên lạc, công nghệ này đang trở nên bùng nổ. 

Một dịch vụ được gọi là Google Wallet đã được giới thiệu ở Hoa Kỳ với mục đích là làm cho điện thoại thông minh của chúng tôi trở thành một giải pháp thay thế khả thi đối với thẻ tín dụng và thẻ vận chuyển.

Thứ Hai, 29 tháng 10, 2018

Android - Kết nối mạng

Android cho phép ứng dụng của bạn kết nối với internet hoặc bất kỳ mạng nội bộ nào khác và cho phép bạn thực hiện các hoạt động mạng.

Một thiết bị có thể có nhiều loại kết nối mạng khác nhau. Chương này tập trung vào việc sử dụng kết nối Wi-Fi hoặc kết nối mạng di động.

Kiểm tra kết nối mạng

Trước khi bạn thực hiện bất kỳ hoạt động mạng nào, trước tiên bạn phải kiểm tra xem bạn có được kết nối với mạng hoặc internet đó không vv Đối với Android này, hãy cung cấp lớp ConnectivityManager . Bạn cần khởi tạo một đối tượng của lớp này bằng cách gọi phương thức getSystemService () . Cú pháp của nó được đưa ra dưới đây

Link đăng ký khóa học : Học lập trình Android cơ bản.

ConnectivityManager check = (ConnectivityManager) 
this.context.getSystemService(Context.CONNECTIVITY_SERVICE);  
Khi bạn khởi tạo đối tượng của lớp ConnectivityManager, bạn có thể sử dụng phương thức getAllNetworkInfo để lấy thông tin của tất cả các mạng.

Phương thức này trả về một mảng của NetworkInfo . Vì vậy, bạn phải nhận được nó như thế này.
NetworkInfo[] info = check.getAllNetworkInfo();
Điều cuối cùng bạn cần làm là kiểm tra trạng thái kết nối của mạng. Cú pháp của nó được đưa ra dưới đây
for ( int i = 0 ; i < thông tin . length ; i ++) { if ( thông tin [ i ]. getState () == NetworkInfo . State . CONNECTED ) { Toast . makeText ( ngữ cảnh , "Internet được kết nối  
      
       
      Toast.LENGTH_SHORT) .show ();
   }
}
Ngoài các trạng thái kết nối này, có một số trạng thái khác mà một mạng có thể đạt được. Chúng được liệt kê dưới đây

Sr.NoTiểu bang
1Kết nối
2Đã ngắt kết nối
3Ngắt kết nối
4Bị đình chỉ
5không xác định

Thực hiện các hoạt động mạng

Sau khi kiểm tra xem bạn đã kết nối với internet chưa, bạn có thể thực hiện bất kỳ thao tác mạng nào. Ở đây chúng tôi đang tìm nạp html của một trang web từ một url.

Android cung cấp lớp HttpURLConnection và URL để xử lý các hoạt động này. Bạn cần khởi tạo một đối tượng của lớp URL bằng cách cung cấp liên kết của trang web. Cú pháp của nó như sau:
String link = "http://www.google.com";
URL url = new URL(link);   
Sau đó, bạn cần gọi phương thức openConnection của lớp url và nhận nó trong một đối tượng HttpURLConnection. Sau đó bạn cần gọi phương thức kết nối của lớp HttpURLConnection.
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();      
Và điều cuối cùng bạn cần làm là tìm nạp HTML từ trang web. Đối với điều này, bạn sẽ sử dụng InputStream và lớp BufferedReader . Cú pháp của nó được đưa ra dưới đây
InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String webPage = "",data="";

while ((data = reader.readLine()) != null){
   webPage += data + "\n";
}
Ngoài phương thức kết nối này, còn có các phương thức khác có sẵn trong lớp HttpURLConnection. Chúng được liệt kê dưới đây

Sr.NoPhương pháp & mô tả
1ngắt kết nối ()

Phương thức này giải phóng kết nối này để các tài nguyên của nó có thể được sử dụng lại hoặc đóng lại
2getRequestMethod ()

Phương thức này trả về phương thức yêu cầu sẽ được sử dụng để thực hiện yêu cầu tới máy chủ HTTP từ xa
3getResponseCode ()

Phương thức này trả về mã phản hồi được trả về bởi máy chủ HTTP từ xa
4setRequestMethod (Phương thức String)
Phương thức này Đặt lệnh yêu cầu sẽ được gửi đến máy chủ HTTP từ xa
5usingProxy ()

Phương thức này trả về kết nối này có sử dụng máy chủ proxy hay không

Thí dụ

Ví dụ dưới đây cho thấy việc sử dụng lớp HttpURLConnection. Nó tạo ra một ứng dụng cơ bản cho phép bạn tải xuống HTML từ một trang web cụ thể.

Để thử nghiệm với ví dụ này, bạn cần chạy trên thiết bị thực tế mà internet wifi được kết nối.

Các bướcSự miêu tả
1Bạn sẽ sử dụng Android studio IDE để tạo ứng dụng Android theo gói com.tutorialspoint.myapplication.
2Sửa đổi tệp src / MainActivity.java để thêm mã Hoạt động.
4Sửa đổi tệp XML bố trí res / layout / activity_main.xml thêm bất kỳ thành phần GUI nào nếu cần.
6Sửa đổi AndroidManifest.xml để thêm các quyền cần thiết.
7Chạy ứng dụng và chọn một thiết bị Android đang chạy và cài đặt ứng dụng trên đó và xác minh kết quả.
Đây là nội dung của src / MainActivity.java .
package com.tutorialspoint.myapplication;

import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;
import android.view.View;

import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.IOException;
import java.io.InputStream;

import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class MainActivity extends ActionBarActivity {
   private ProgressDialog progressDialog;
   private Bitmap bitmap = null;
   Button b1;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      b1 = (Button) findViewById(R.id.button);

      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            checkInternetConenction();
            downloadImage("http://www.tutorialspoint.com/green/images/logo.png");
         }
      });
   }

   private void downloadImage(String urlStr) {
      progressDialog = ProgressDialog.show(this, "", "Downloading Image from " + urlStr);
      final String url = urlStr;

      new Thread() {
         public void run() {
            InputStream in = null;

            Message msg = Message.obtain();
            msg.what = 1;

            try {
               in = openHttpConnection(url);
               bitmap = BitmapFactory.decodeStream(in);
               Bundle b = new Bundle();
               b.putParcelable("bitmap", bitmap);
               msg.setData(b);
               in.close();
            }catch (IOException e1) {
               e1.printStackTrace();
            }
            messageHandler.sendMessage(msg);
         }
      }.start();
   }

   private InputStream openHttpConnection(String urlStr) {
      InputStream in = null;
      int resCode = -1;

      try {
         URL url = new URL(urlStr);
         URLConnection urlConn = url.openConnection();

         if (!(urlConn instanceof HttpURLConnection)) {
            throw new IOException("URL is not an Http URL");
         }
   
         HttpURLConnection httpConn = (HttpURLConnection) urlConn;
         httpConn.setAllowUserInteraction(false);
         httpConn.setInstanceFollowRedirects(true);
         httpConn.setRequestMethod("GET");
         httpConn.connect();
         resCode = httpConn.getResponseCode();

         if (resCode == HttpURLConnection.HTTP_OK) {
            in = httpConn.getInputStream();
         }
      }catch (MalformedURLException e) {
         e.printStackTrace();
      }catch (IOException e) {
         e.printStackTrace();
      }
      return in;
   }

   private Handler messageHandler = new Handler() {
      public void handleMessage(Message msg) {
         super.handleMessage(msg);
         ImageView img = (ImageView) findViewById(R.id.imageView);
         img.setImageBitmap((Bitmap) (msg.getData().getParcelable("bitmap")));
         progressDialog.dismiss();
      }
   };

   private boolean checkInternetConenction() {
      // get Connectivity Manager object to check connection
      ConnectivityManager connec
         =(ConnectivityManager)getSystemService(getBaseContext().CONNECTIVITY_SERVICE);

      // Check for network connections
      if ( connec.getNetworkInfo(0).getState() == 
         android.net.NetworkInfo.State.CONNECTED ||
         connec.getNetworkInfo(0).getState() == 
         android.net.NetworkInfo.State.CONNECTING ||
         connec.getNetworkInfo(1).getState() == 
         android.net.NetworkInfo.State.CONNECTING ||
         connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED ) {
            Toast.makeText(this, " Connected ", Toast.LENGTH_LONG).show();
            return true;
         }else if (
            connec.getNetworkInfo(0).getState() == 
            android.net.NetworkInfo.State.DISCONNECTED ||
            connec.getNetworkInfo(1).getState() == 
            android.net.NetworkInfo.State.DISCONNECTED  ) {
               Toast.makeText(this, " Not Connected ", Toast.LENGTH_LONG).show();
               return false;
            }
         return false;
   }

}
Đây là nội dung của activity_main.xml .
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
   
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="UI Animator Viewer"
      android:id="@+id/textView"
      android:textSize="25sp"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView2"
      android:layout_below="@+id/textView"
      android:layout_alignRight="@+id/textView"
      android:layout_alignEnd="@+id/textView"
      android:textColor="#ff36ff15"
      android:textIsSelectable="false"
      android:textSize="35dp" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Button"
      android:id="@+id/button"
      android:layout_below="@+id/imageView"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="76dp" />

</RelativeLayout>
Đây là nội dung của Strings.xml .
<resources>
   <string name="app_name">My Application</string>
</resources>
Đây là nội dung của AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.tutorialspoint.myapplication" >
   <uses-permission android:name="android.permission.INTERNET"></uses-permission>
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
   
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name=".MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
        
   </application>
</manifest>
Hãy thử chạy ứng dụng của bạn. Tôi cho rằng bạn đã kết nối thiết bị Android Mobile thực tế với máy tính của mình.

Để chạy ứng dụng từ studio Android, mở một trong các tệp hoạt động của dự án của bạn và nhấp vào Chạy biểu tượng từ thanh công cụ.

Trước khi bắt đầu ứng dụng của bạn, Android studio sẽ hiển thị cửa sổ sau để chọn tùy chọn mà bạn muốn chạy ứng dụng Android của mình.

Học lập trình Android cơ bản
Chọn thiết bị di động của bạn làm tùy chọn và sau đó kiểm tra thiết bị di động của bạn sẽ hiển thị màn hình sau đây

Bây giờ chỉ cần nhấp vào nút, Nó sẽ kiểm tra kết nối internet cũng như nó sẽ tải hình ảnh.

Ra sẽ như sau và nó đã lấy logo từ internet.

Lập trình Android - RenderScript

Trong chương này, chúng ta sẽ tìm hiểu về Android RenderScript. Thông thường các ứng dụng trên Android được thiết kế để tiêu thụ tài nguyên ...