Thursday, 31 December 2015

Detect shake listener in android


     Here I am going to explain how to detect shake listener in android



Step 1).ShakeListener.java


import android.content.Context;
import android.hardware.SensorListener;
import android.hardware.SensorManager;

public class ShakeListener implements SensorListener 
{
    private static final int FORCE_THRESHOLD = 400;
    private static final int TIME_THRESHOLD = 120;
    private static final int SHAKE_TIMEOUT = 500;
    private static final int SHAKE_DURATION =1000;
    private static final int SHAKE_COUNT = 6;

    private SensorManager mSensorMgr;
    private float mLastX = -1.0f, mLastY = -1.0f, mLastZ = -1.0f;
    private long mLastTime;
    private OnShakeListener mShakeListener;
    private Context mContext;
    private int mShakeCount = 0;
    private long mLastShake;
    private long mLastForce;

    public interface OnShakeListener {
        public void onShake();
    }

    public ShakeListener(Context context) {
        mContext = context;
        resume();
    }

    public void setOnShakeListener(OnShakeListener listener) {
        mShakeListener = listener;
    }

    public void resume() {
         mSensorMgr =(SensorManager)
              mContext.getSystemService(Context.SENSOR_SERVICE);                                                                                          

      if (mSensorMgr == null) {
            throw new UnsupportedOperationException("Sensors not supported");
       }
     boolean supported =mSensorMgr.registerListener 
                         (this,  SensorManager.SENSOR_ACCELEROMETER,  
                         SensorManager.SENSOR_DELAY_GAME);                                                         
             if (!supported ) {
               mSensorMgr.unregisterListener
                    (this,SensorManager.SENSOR_ACCELEROMETER); 
  throw new UnsupportedOperationException("Accelerometer not supported");
        }
    }

    public void pause() {
        if (mSensorMgr != null) 
           {
            mSensorMgr .unregisterListener
                                (this, SensorManager.SENSOR_ACCELEROMETER);
            mSensorMgr = null;
        }
    }

    public void onAccuracyChanged(int sensor, int accuracy) {
    }

    public void onSensorChanged(int sensor, float[] values) {
        if (sensor != SensorManager.SENSOR_ACCELEROMETER) return;
        long now = System.currentTimeMillis();

        if ((now - mLastForce) > SHAKE_TIMEOUT) {
            mShakeCount = 0;
        }

        if ((now - mLastTime) > TIME_THRESHOLD) 
        {
            long diff = now - mLastTime;
            float speedMath.abs(values[SensorManager.DATA_X]
                                           +values[SensorManager.DATA_Y]
                                           +values[SensorManager.DATA_Z] 
                             - mLastX mLastY - mLastZ) / diff * 10000;                                                                                                                                                                             


           if (speed > FORCE_THRESHOLD) 
           {
           if ((++mShakeCount >= SHAKE_COUNT) && (now -                                                                                             mLastShake>SHAKE_DURATION)) 
            {
                    mLastShake = now;
                    mShakeCount = 0;
                    if (mShakeListener != null) 
                    {
                        mShakeListener.onShake();
                    }
                }
                mLastForce = now;
            }
            mLastTime = now;
            mLastX = values[SensorManager.DATA_X];
            mLastY = values[SensorManager.DATA_Y];
            mLastZ = values[SensorManager.DATA_Z];
        }
    }

}


Step 2)Use below steps in your activity

   private ShakeListener mShaker;


         mShaker= new ShakeListener(this);
         mShaker.setOnShakeListener(new ShakeListener.OnShakeListener() {
            public void onShake() 
              {
                          //To do something
              }

Happy Coding;)

Read Google Chrome history in android


  Here I am going to explain how to read google chrome history in android studio IDE


  private void getBrowserHistory() {

  final Uri BOOKMARKS_URI; 
          
          BOOKMARKS_URI=Uri.parse("content://android.chrome.browser/bookmarks");     
         final String[] HISTORY_PROJECTION = new String[]
         {
                "_id", // 0
                "url", // 1
                "visits", // 2
                "date", // 3
                "bookmark", // 4
                "title", // 5
                "favicon", // 6
                "thumbnail", // 7
                "touch_icon", // 8
                "user_entered", // 9
        };


  Cursor mCur = this.managedQuery(BOOKMARKS_URIHISTORY_PROJECTION, null,     null,null);
        this.startManagingCursor(mCur );
        mCur .moveToFirst();

        String title = "";
        String url = "";
        String date="";

        if (mCur.moveToFirst() && mCur.getCount() > 0) {
            while (mCur.isAfterLast() == false ) {

                title= mCur.getString(mCur .getColumnIndex("title"));
                url = mCur.getString(mCur .getColumnIndex("url"));
                date= mCur.getString(mCur .getColumnIndex("date"));

              

                mCur .moveToNext();
            }
        }
}


Add the below permission to your Manifest file.

<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>


Happy Coding:)

Wednesday, 30 December 2015

Lock phone Programmatically android


    Here I am going to explain how to lock our phone Programmatically in android.



   

                                 




Step 1).MainActivity.java

import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;


public class MainActivity extends AppCompatActivity {

    private DevicePolicyManager devicePolicyManager = null;
    private ComponentName componentName = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

      componentName = new ComponentName(this, AdminReceiver.class);
      devicePolicyManager =(DevicePolicyManager)
                                       getSystemService(DEVICE_POLICY_SERVICE);
      lock();                                                                                                            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view)
            {

                devicePolicyManager.lockNow();

            }
        });
    }
    public void lock()
    {

             Intent intent =new Intent
                 (DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
             intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,                                                                                           componentName);
             intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"");
                
             startActivity(intent);

    }

}

Step 2).AdminReceiver.java

import android.app.admin.DeviceAdminReceiver;

public class AdminReceiver extends DeviceAdminReceiver
{


}


Step 3).Register receiver in your Manifest file


      <receiver
            android:name="AdminReceiver"
            android:permission="android.permission.BIND_DEVICE_ADMIN">
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/device_admin" />

            <intent-filter>
             <action  
                android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
             </intent-filter>
        </receiver>
   
      <uses-feature
        android:name="android.software.device_admin"
        android:required="true" />

Happy Coding:)

How to send SMS in android without user interaction


       Here I am going to explain how to send text message(SMS) in android without user interaction.


Step 1).Declare BroadCastReceiver and PendingIntent in your actvity;


    BroadcastReceiver sendBroadcastReceiver;
    BroadcastReceiver deliveryBroadcastReceiver;
    PendingIntent deliveredPI;
    PendingIntent sentPI;


Step 2).Call this function


   private void sendSMS(String phoneNumber, String message) {
        String SENT = "SMS_SENT";
        String DELIVERED = "SMS_DELIVERED";

        sentPI= PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
               

       deliveredPI= PendingIntent.getBroadcast(this, 0,                                                                                                        newIntent(DELIVERED),0);                   
        //---SMS has been sent---
        sendBroadcastReceiver= new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode()) {
                    case Activity.RESULT_OK:
                        Toast.makeText(getBaseContext(), "SMS sent",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        Toast.makeText(getBaseContext(), "Generic failure",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                        Toast.makeText(getBaseContext(), "No service",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_NULL_PDU:
                        Toast.makeText(getBaseContext(), "Null PDU",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        Toast.makeText(getBaseContext(), "Radio off",
                                Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        };
        registerReceiver(sendBroadcastReceiver, new IntentFilter(SENT));
        //---when the SMS has been delivered---
        deliveryBroadcastReceiver= new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode()) {
                    case Activity.RESULT_OK:
                        Toast.makeText(getBaseContext(), "SMS delivered",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case Activity.RESULT_CANCELED:
                        Toast.makeText(getBaseContext(), "SMS not delivered",
                                Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        };


       registerReceiver(deliveryBroadcastReceiver, new IntentFilter(DELIVERED));
       SmsManager sms = SmsManager.getDefault();
       sms.sendTextMessage(phoneNumber, null,message sentPI, deliveredPI);

    }


Step 3) UnRegister the receiver 

   @Override
    protected void onStop() {
        try {
            if (sentPI != null) {
                unregisterReceiver(sendBroadcastReceiver);
                sentPI = null;
            }

            if (deliveredPI != null) {
                unregisterReceiver(deliveryBroadcastReceiver);
                deliveredPI =null;
            }
        } catch (Exception e) {

        }
        super.onStop();
    }

Step 4)Add SMS permission in your Manifest file

 <uses-permission android:name="android.permission.SEND_SMS" />


And Make Sure you have SMS plan


Happy coding:)

  

Monday, 21 December 2015

Android studio read browser history

  Here I am going to explain how to read browser history from android



 private void getBrowserHistory() {

         final Uri BOOKMARKS_URI = Uri.parse("content://browser/bookmarks");
         final String[] HISTORY_PROJECTION = new String[]
         {
                "_id", // 0
                "url", // 1
                "visits", // 2
                "date", // 3
                "bookmark", // 4
                "title", // 5
                "favicon", // 6
                "thumbnail", // 7
                "touch_icon", // 8
                "user_entered", // 9
        };


  Cursor mCur = this.managedQuery(BOOKMARKS_URI, HISTORY_PROJECTION, null,   null,null);
        this.startManagingCursor(mCur );
        mCur .moveToFirst();

        String title = "";
        String url = "";
        String date="";

        if (mCur.moveToFirst() && mCur.getCount() > 0) {
            while (mCur.isAfterLast() == false ) {

                title= mCur.getString(mCur .getColumnIndex("title"));
                url = mCur.getString(mCur .getColumnIndex("url"));
                date= mCur.getString(mCur .getColumnIndex("date"));

              

                mCur .moveToNext();
            }
        }
}


Add the below permission to your Manifest file.

<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>


Happy Coding:)

Monday, 30 November 2015

Android get current address with street name and city

  Here I am going to explain how to show current address in android with street name and city


                                                   


Step 1)MainActivity.java

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.Settings;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity
{
    TextView tvAddress;

    LocationService appLocationService;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        appLocationService= new LocationService(MainActivity.this);
        tvAddress= (TextView) findViewById(R.id.tvAddress);
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
        Location networkLocation= appLocationService.getLocation                                                                                                              (LocationManager.NETWORK_PROVIDER);                    
            if (networkLocation!= null)
                {
                    double latitude = networkLocation.getLatitude();
                    double longitude = networkLocation.getLongitude();
                    LocationAddress locationAddress = new LocationAddress();
                    locationAddress.getAddressFromLocation(latitude longitude ,
                            getApplicationContext(), new GeocoderHandler());
                }
            }

        });
  }
 private class GeocoderHandler extends Handler {
        @Override
        public void handleMessage(Message message) {
            String locationAddress;
            switch (message.what) {
                case 1:
                    Bundle bundle = message.getData();
                    locationAddress= bundle.getString("address");
                    break;
                default:
                    locationAddress= null;
            }
            tvAddress.setText(locationAddress);
        }
    }
}

Step 2)LocationAddress.java

import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import java.io.IOException;
import java.util.List;
import java.util.Locale;

public class LocationAddress
{
    private static final String TAG = "LocationAddress";

    public static void getAddressFromLocation(final double latitude, final double longitude,
                                              final Context context, final Handler handler)
    {
        Thread thread = new Thread()
        {
            @Override
            public void run() {
                Geocoder geocoder = new Geocoder(context, Locale.getDefault());
                String result = null;
                try {
                    List<Address> addressList = geocoder.getFromLocation(
                            latitudelongitude, 1);
                    if (addressList != null && addressList .size() > 0) {
                        Address address addressList .get(0);
                        StringBuilder sb = new StringBuilder();
                        for (int i = 0; i < address .getMaxAddressLineIndex(); i++) {
                            sb.append(address .getAddressLine(i)).append("\n");
                        }
                        sb.append(address .getLocality()).append("\n");
                        sb.append(address .getPostalCode()).append("\n");
                       sb.append(address .getCountryName());
                        result = sb.toString();
                    }
                } catch (IOException e) {
                    Log.e(TAG, "Unable connect to Geocoder", e);
                } finally {
                    Message message = Message.obtain();
                    message .setTarget(handler);
                    if (result != null) {
                        message .what = 1;
                        Bundle bundle = new Bundle();
                        result = "Latitude: " + latitude+ " Longitude: " + longitude+
                                "\n\nAddress:\n" + result;
                        bundle.putString("address", result);
                        message.setData(bundle);
                    } else {
                        message.what = 1;
                        Bundle bundle = new Bundle();
                        result = "Latitude: " + latitude+ " Longitude: " + longitude+
                                "\n Unable to get address for this lat-long.";
                        bundle.putString("address", result);
                        message.setData(bundle);
                    }
                    message.sendToTarget();
                }
            }
        };
        thread.start();
    }
}

Step 3).LocationService.java


import android.Manifest;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;

public class LocationService extends Service implements LocationListener {

    protected LocationManager locationManager;
    Location location;
    private static final long MIN_DISTANCE_FOR_UPDATE = 10;
    private static final long MIN_TIME_FOR_UPDATE = 1000 * 60 * 2;

    public LocationService(Context context) {
        locationManager= (LocationManager) context
                .getSystemService(LOCATION_SERVICE);
    }

    public Location getLocation(String provider) {

      if (locationManager.isProviderEnabled(provider))
       {     
             locationManager.requestLocationUpdates
                               (provider,MIN_TIME_FOR_UPDATE,MIN_DISTANCE_FOR_UPDATE, this);          
          if (locationManager != null)
            {
                locationlocationManager.getLastKnownLocation(provider);
                return location;
            }
        }
        return null;
    }

    @Override
    public void onLocationChanged(Location location) {
    }

    @Override
    public void onProviderDisabled(String provider) {
    }

    @Override
    public void onProviderEnabled(String provider) {
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

}


Step 4)activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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/coordinatorLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">
  
   <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>


Step 5)content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main">

  <TextView
        android:id="@+id/tvAddress"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="150dp" />
</RelativeLayout>


Step 6) gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        applicationId "com.sharelocation"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.android.support:design:23.1.0'
}

Step 7)styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="AppTheme.AppBarOverlay"                                                           parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

</resources>


Step 8)colors.xml

 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
</resources>

Add the below permissions to your Manifest file

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

 <uses-permission android:name="android.permission.INTERNET" />


Happy coding :)