Open top menu


Read /Write NFC Tag With Android.

                                                               NFC  App Tutorial 
NFC :-  NFC is  the Near field communication, NFC short range wireless technology. NFC allows you to share small payload of Data between an NFC tag and an Android device.
The spectrum range from simple sticker and key ring to complex cards with integrated cryptographic hardware. Tag also differ in their chip technology.

NFC Access in the Android Manifest.
To get access to the NFC hardware, you have to apply for permission in the manifest. The  element so that your application shows up in google paly only for devices that have NFC Hardware.
<uses-permission android:name="android.permission.NFC" />
<
uses-feature android:name="android.hardware.nfc" android:required="true" />


Filtering for NFC Intents :- Used only three filter for tag.

1.ACTION_NDEF_DISCOVERED
2.ACTION_TAG_DISCOVERED
3ACTION_TECH_DISCOVERED

ACTION_NDEF_DISCOVERED
<intent-filter>
    <
action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <
category android:name="android.intent.category.DEFAULT" />
    <
data android:mimeType="text/plain" />
</
intent-filter>

ACTITON_TECH_DISCOVERED
Create nfc_tech_filter .xml inside res folder…
xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <
tech-list>
        <
tech>android.nfc.tech.Ndef</tech>
       

   
</tech-list>
</
resources>

ACTION_TAG_DISCOVERED
<intent-filter>
    <
action android:name="android.nfc.action.TAG_DISCOVERED" />
 </
intent-filter>

EXPLAIN HOW TO USED ALL THOSE REQUIRED PERMISSIONS AND FUCTION.
1. First you have to Enable you NFC  Option in android device.
2. Create new android project in android studio.
3. Add some required permission in manifest.
Manifest.xml
xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   
package="com.project.example.nfcreader">

    <
uses-permission android:name="android.permission.NFC" />
    <
uses-feature android:name="android.hardware.nfc" android:required="true" />

    <
application
       
android:allowBackup="true"
       
android:icon="@mipmap/ic_launcher"
       
android:label="@string/app_name"
       
android:roundIcon="@mipmap/ic_launcher_round"
        
android:supportsRtl="true"
       
android:theme="@style/AppTheme">
        <
activity android:name=".MainActivity">
            <
intent-filter>
                <
action android:name="android.intent.action.MAIN" />

                <
category android:name="android.intent.category.LAUNCHER" />
            </
intent-filter>

            <
intent-filter>
                <
action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <
category android:name="android.intent.category.DEFAULT" />
                <
data android:mimeType="text/plain" />
            </
intent-filter>
            <
meta-data
               
android:name="android.nfc.action.TECH_DISCOVERED"
               
android:resource="@xml/nfc_tech_filter" />

        </
activity>
        <
activity android:name=".SecondActivity"></activity>
    </
application>

</
manifest>

4 Create nfc _tech_filter.xml inside res/xml directory.
xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <
tech-list>
        <
tech>android.nfc.tech.Ndef</tech>
       

   
</tech-list>
</
resources>

5 Create activity_main.xml layout inside layout folder.
xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   
android:layout_width="fill_parent"
   
android:layout_height="fill_parent"
   
android:orientation="vertical">

   
<LinearLayout
       
android:layout_width="match_parent"
       
android:layout_height="wrap_content"
       
android:layout_marginTop="20sp"
       
android:visibility="gone">

        <
EditText
           
android:id="@+id/edit_message"
           
android:layout_width="wrap_content"
           
android:layout_height="wrap_content"
           
android:layout_weight="2"
           
android:hint="message" />

        <
Button
           
android:id="@+id/button"
            
android:layout_width="wrap_content"
           
android:layout_height="wrap_content"
           
android:layout_weight="1"
           
android:text="Write" />

        <
TextView
           
android:id="@+id/nfc_contents"
           
android:layout_width="match_parent"
           
android:layout_height="wrap_content" />
    </
LinearLayout>

</
LinearLayout>

6 Add Main_activity.java.
package com.project.example.nfcreader;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.FormatException;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.os.Parcelable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

public class MainActivity extends Activity {

   
public static final String ERROR_DETECTED = "No NFC tag detected!";
   
public static final String WRITE_SUCCESS = "Text written to the NFC tag successfully!";
   
public static final String WRITE_ERROR = "Error during writing, is the NFC tag close enough to your device?";
    NfcAdapter
nfcAdapter;
    PendingIntent
pendingIntent;
    IntentFilter
writeTagFilters[];
   
boolean writeMode;
    Tag
myTag;
    Context
context;

    TextView
tvNFCContent;
    TextView
message;
    Button
btnWrite;
   
   
public static String Id_Value;
   
@Override
   
public void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        setContentView(R.layout.
activity_main);
       
context = this;

       
tvNFCContent = (TextView) findViewById(R.id.nfc_contents);
       
message = (TextView) findViewById(R.id.edit_message);
       
btnWrite = (Button) findViewById(R.id.button);

      
      
        
btnWrite.setOnClickListener(new View.OnClickListener()
        {
           
@Override
           
public void onClick(View v) {
               
try {
                   
if(myTag ==null) {
                        Toast.makeText(
context, ERROR_DETECTED, Toast.LENGTH_LONG).show();
                    }
else {
                        write(
message.getText().toString(), myTag);
                        Toast.makeText(
context, WRITE_SUCCESS, Toast.LENGTH_LONG ).show();
                    }
                }
catch (IOException e) {
                    Toast.makeText(
context, WRITE_ERROR, Toast.LENGTH_LONG ).show();
                    e.printStackTrace();
                }
catch (FormatException e) {
                    Toast.makeText(
context, WRITE_ERROR, Toast.LENGTH_LONG ).show();
                    e.printStackTrace();
                }
            }
        });

       
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
       
if (nfcAdapter == null) {
           
// Stop here, we definitely need NFC
            
Toast.makeText(this, "This device doesn't support NFC.", Toast.LENGTH_LONG).show();
            finish();
        }
        readFromIntent(getIntent());

       
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
        IntentFilter tagDetected =
new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
        tagDetected.addCategory(Intent.
CATEGORY_DEFAULT);
       
writeTagFilters = new IntentFilter[] { tagDetected };
    }


   
/**************Read From NFC Tag**********************************/
   
private void readFromIntent(Intent intent) {
        String action = intent.getAction();
       
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
            Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.
EXTRA_NDEF_MESSAGES);
            NdefMessage[] msgs =
null;
           
if (rawMsgs != null) {
                msgs =
new NdefMessage[rawMsgs.length];
               
for (int i = 0; i < rawMsgs.length; i++) {
                    msgs[i] = (NdefMessage) rawMsgs[i];
                }
            }
            buildTagViews(msgs);
        }
    }
   
private void buildTagViews(NdefMessage[] msgs) {
       
if (msgs == null || msgs.length == 0) return;

        String text =
"";
//        String tagId = new String(msgs[0].getRecords()[0].getType());
       
byte[] payload = msgs[0].getRecords()[0].getPayload();
        String textEncoding = ((payload[
0] & 128) == 0) ? "UTF-8" : "UTF-16"; // Get the Text Encoding
       
int languageCodeLength = payload[0] & 0063; // Get the Language Code, e.g. "en"
        // String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");

       
try {
           
// Get the Text
           
text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
        }
catch (UnsupportedEncodingException e) {
            Log.e(
"UnsupportedEncoding", e.toString());
        }

       
tvNFCContent.setText("NFC Content: " + text);
    
    }


   
/****Write to NFC Tag**************************************************/
   
private void write(String text, Tag tag) throws IOException, FormatException {
        NdefRecord[] records = { createRecord(text) };
        NdefMessage message =
new NdefMessage(records);
       
// Get an instance of Ndef for the tag.
       
Ndef ndef = Ndef.get(tag);
       
// Enable I/O
       
ndef.connect();
       
// Write the message
       
ndef.writeNdefMessage(message);
       
// Close the connection
       
ndef.close();
    }
   
private NdefRecord createRecord(String text) throws UnsupportedEncodingException {
        String lang       =
"en";
       
byte[] textBytes  = text.getBytes();
       
byte[] langBytes  = lang.getBytes("US-ASCII");
       
int    langLength = langBytes.length;
       
int    textLength = textBytes.length;
       
byte[] payload    = new byte[1 + langLength + textLength];

       
// set status byte (see NDEF spec for actual bits)
       
payload[0] = (byte) langLength;

       
// copy langbytes and textbytes into payload
       
System.arraycopy(langBytes, 0, payload, 1,              langLength);
        System.arraycopy(textBytes,
0, payload, 1 + langLength, textLength);

        NdefRecord recordNFC =
new NdefRecord(NdefRecord.TNF_WELL_KNOWN,  NdefRecord.RTD_TEXTnew byte[0], payload);

       
return recordNFC;
    }



   
@Override
   
protected void onNewIntent(Intent intent) {
        setIntent(intent);
        readFromIntent(intent);
       
if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())){
           
myTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        }
    }

   
@Override
   
public void onPause(){
       
super.onPause();
        WriteModeOff();
    }

   
@Override
   
public void onResume(){
       
super.onResume();
        WriteModeOn();
    }



   
/********Enable Write**********************/
   
private void WriteModeOn(){
       
writeMode = true;
       
nfcAdapter.enableForegroundDispatch(this, pendingIntent, writeTagFilters, null);
    }
   
/* *****Disable Write**********************************************/
   
private void WriteModeOff(){
       
writeMode = false;
       
nfcAdapter.disableForegroundDispatch(this);
    }
}

try this code…



Read more





Exaplain:- How to Build a Responsive UI in Android?

You Can Bulid to Build a Responsive UI  with ConstraintLayout in Android. The ConstraintLayout similar to Relative Layout, All view laid out according to relationship between siling views.

ConstraintLayout is Available in an API Library, the library compatible  with Android 2.3 (API Level 9) and higher.


More Info clickhere







Read more







Example: How to debug android App via WIFI in Android Studio?

Step 1- Check android device and your PC WiFi both are same Internet  connection.

Step 2- First, you can connect android device via cable?  Check the Android device is connected 
android studio.

Step 3- Then, Open Run(CMD )Window, Get  \sdk \tool-plateform>




Step 4-Run >adp tcpip 5555



Step 4- Then, Remove Cable.

Step 5- Get android device  Ip Address.

Step 6-Setting-- >About Phone -- >Status

Step 7-you can run This command >adb connect  





Step 8- your Android device connect.




Read more

 Example :- How to drag and drop imageView,textVew programmatically in android.

First ,you have to Used Library Sticker View,with help of stickerView you can rotate and scale Image and text.

activity_main.xml


xml version="1.0" encoding="utf-8"?>

<FrameLayout
   
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:id="@+id/canvasView"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"
   
tools:context=".MainActivity">


    <
ImageView
       
android:id="@+id/imageView"
       
android:layout_gravity="center"
       
android:layout_width="wrap_content"
        
android:layout_height="wrap_content"
       
android:src="@drawable/im"
       
android:scaleType="fitXY"/>
</
FrameLayout>


MainActivity.java

package com.project.example.draganddropproject;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.FrameLayout;

public class MainActivity extends AppCompatActivity {

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);

        setContentView(R.layout.
activity_main);

        FrameLayout canvas = (FrameLayout) findViewById(R.id.
canvasView);

       
//add a stickerImage to canvas
       
StickerImageView iv_sticker = new StickerImageView(MainActivity.this);
        iv_sticker.setImageDrawable(getResources().getDrawable(R.drawable.
cap));
        canvas.addView(iv_sticker);

       
//add a stickerText to canvas
       
StickerTextView tv_sticker = new StickerTextView(MainActivity.this);
        tv_sticker.setText(
"Android Tutorial Point");
        canvas.addView(tv_sticker);

    }
}





Read more


Example: How to implement AdapterViewFlipper In android.And why we are used?


Simple ViewAnimator that will Aniamte between two or moreViews View that have been added to it.Only one Child is shown at a time.


activity_main.xml
....................................................................... 

xml version="1.0" encoding="utf-8"
LinearLayout 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="com.project.example.androidbeginnerpoint.MainActivity"



  
 >      
android:layout_width="match_parent"       
android:layout_height="match_parent"       
android:id="@+id/simpleAdapterViewFlipper" 

 </LinearLayout>
............................................ 


row_item.xml

............................................ 

xml version="1.0" encoding="utf-8"

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
android:layout_width="wrap_content"    
android:layout_height="wrap_content"    
android:background="#fff"    
android:gravity="center"    
android:orientation="vertical"

<ImageView        

android:id="@+id/fruitImage"        
android:layout_width="wrap_content"        
android:layout_height="150dp"       
 android:layout_gravity="center" />

 <TextView        
android:id="@+id/fruitName"        
android:layout_width="wrap_content"        
android:layout_height="wrap_content"        
android:layout_gravity="center"        
android:layout_marginTop="2dp"        
android:textColor="#000" />

</LinearLayout>
.................................... 




MainActivity.Java

..................................... 

package com.project.example.androidbeginnerpoint;
import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.AdapterViewFlipper;
import android.widget.ProgressBar;

public class MainActivity extends AppCompatActivity {

    private AdapterViewFlipper simpleAdapterViewFlipper;
    int[] fruitImages = {R.drawable.a, R.drawable.ga, R.drawable.s};     
    String fruitNames[] = {"Apple", "Green Apple", "Litchi"};

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        simpleAdapterViewFlipper = (AdapterViewFlipper) 
findViewById(R.id.simpleAdapterViewFlipper);  
                 AdapterViewFlip customAdapter = new AdapterViewFlip
(getApplicationContext(), fruitNames, fruitImages);
        simpleAdapterViewFlipper.setAdapter(customAdapter);  
                simpleAdapterViewFlipper.setFlipInterval(3000);
        
        simpleAdapterViewFlipper.setAutoStart(true);
    }
}
............................................... 



AdapterViewFlip.Java
................................. 


package com.project.example.androidbeginnerpoint;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;


public class AdapterViewFlip extends BaseAdapter {
    Context context;
    int[] fruitImages;
    String[] fruitNames;
    LayoutInflater inflter;

    public AdapterViewFlip(Context applicationContext, String[] fruitNames,
 int[] fruitImages) {
        this.context = applicationContext;
        this.fruitImages = fruitImages;
        this.fruitNames = fruitNames;
        inflter = (LayoutInflater.from(applicationContext));
    }

    @Override    public int getCount() {
        return fruitNames.length;
    }

    @Override    public Object getItem(int position) {
        return null;
    }

    @Override    public long getItemId(int position) {
        return 0;
    }

    @Override    public View getView(int position, View view, ViewGroup parent) {
        view = inflter.inflate(R.layout.row_item, null);
        TextView fruitName = (TextView) view.findViewById(R.id.fruitName);
        ImageView fruitImage = (ImageView) view.findViewById(R.id.fruitImage);
        fruitName.setText(fruitNames[position]);
        fruitImage.setImageResource(fruitImages[position]);
        return view;
    }
}

.................................... 






Read more