Monday, July 30, 2012

Start Google Maps using intent of ACTION_VIEW in Andorid

To start Android geo viewer, Google Maps, we can start activity with intent "android.content.Intent.ACTION_VIEW", with Uri of "geo:latitude,longitude".

Modify last post "Get location of Cell ID, from opencellid.org using HttpGet()", start Google Maps with the location returned from OpenCellID.

geo:latitude,longitude

AndroidTelephonyManager.java
package com.AndroidTelephonyManager;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.telephony.gsm.GsmCellLocation;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class AndroidTelephonyManager extends Activity {

public class OpenCellID {
 String mcc;  //Mobile Country Code
 String mnc;  //mobile network code
 String cellid; //Cell ID
 String lac;  //Location Area Code

 Boolean error;
 String strURLSent;
 String GetOpenCellID_fullresult;

 String latitude;
 String longitude;

 public Boolean isError(){
  return error;
 }

 public void setMcc(String value){
  mcc = value;
 }

 public void setMnc(String value){
  mnc = value;
 }

 public void setCallID(int value){
  cellid = String.valueOf(value);
 }

 public void setCallLac(int value){
  lac = String.valueOf(value);
 }

 public String getLocation(){
  return(latitude + " : " + longitude);
 }

 public String getLatitude(){
  return latitude;
 }

 public String getLongitude(){
  return longitude;
 }

 public void groupURLSent(){
  strURLSent =
   "http://www.opencellid.org/cell/get?mcc=" + mcc
   +"&mnc=" + mnc
   +"&cellid=" + cellid
   +"&lac=" + lac
   +"&fmt=txt";
 }

 public String getstrURLSent(){
  return strURLSent;
 }

 public String getGetOpenCellID_fullresult(){
  return GetOpenCellID_fullresult;
 }

 public void GetOpenCellID() throws Exception {
  groupURLSent();
  HttpClient client = new DefaultHttpClient();
  HttpGet request = new HttpGet(strURLSent);
  HttpResponse response = client.execute(request);
  GetOpenCellID_fullresult = EntityUtils.toString(response.getEntity());
  spliteResult();
 }

 private void spliteResult(){
  if(GetOpenCellID_fullresult.equalsIgnoreCase("err")){
   error = true;
  }else{
   error = false;
   String[] tResult = GetOpenCellID_fullresult.split(",");
   latitude = tResult[0];
   longitude = tResult[1];
  }
  
 
 }
}

int myLatitude, myLongitude;
OpenCellID openCellID;


   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       TextView textGsmCellLocation = (TextView)findViewById(R.id.gsmcelllocation);
       TextView textMCC = (TextView)findViewById(R.id.mcc);
       TextView textMNC = (TextView)findViewById(R.id.mnc);
       TextView textCID = (TextView)findViewById(R.id.cid);
       TextView textLAC = (TextView)findViewById(R.id.lac);
       TextView textGeo = (TextView)findViewById(R.id.geo);
       TextView textRemark = (TextView)findViewById(R.id.remark);
      
       Button btnViewMap = (Button)findViewById(R.id.viewmap);
       btnViewMap.setOnClickListener(new Button.OnClickListener(){

  @Override
  public void onClick(View arg0) {
   // TODO Auto-generated method stub
   String stringLoc = "geo:" + openCellID.getLatitude() + "," + openCellID.getLongitude();
  
   Toast.makeText(AndroidTelephonyManager.this, stringLoc, Toast.LENGTH_LONG).show();
  
   Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(stringLoc));
   startActivity(intent);
  }});
      
       //retrieve a reference to an instance of TelephonyManager
       TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
       GsmCellLocation cellLocation = (GsmCellLocation)telephonyManager.getCellLocation();
      
       String networkOperator = telephonyManager.getNetworkOperator();
       String mcc = networkOperator.substring(0, 3);
       String mnc = networkOperator.substring(3);
       textMCC.setText("mcc: " + mcc);
       textMNC.setText("mnc: " + mnc);
      
       int cid = cellLocation.getCid();
       int lac = cellLocation.getLac();
       textGsmCellLocation.setText(cellLocation.toString());
       textCID.setText("gsm cell id: " + String.valueOf(cid));
       textLAC.setText("gsm location area code: " + String.valueOf(lac));
      
       openCellID = new OpenCellID();
      
       openCellID.setMcc(mcc);
       openCellID.setMnc(mnc);
       openCellID.setCallID(cid);
       openCellID.setCallLac(lac);
       try {
  openCellID.GetOpenCellID();
 
  if(!openCellID.isError()){
   textGeo.setText(openCellID.getLocation());
   textRemark.setText( "\n\n"
     + "URL sent: \n" + openCellID.getstrURLSent() + "\n\n"
     + "response: \n" + openCellID.GetOpenCellID_fullresult);
  }else{
   textGeo.setText("Error");
  }
 } catch (Exception e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  textGeo.setText("Exception: " + e.toString());
 }
   }   
}


main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
<TextView 
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="@string/hello"
   />
<TextView 
   android:id="@+id/gsmcelllocation"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   />
<TextView 
   android:id="@+id/mcc"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   />
<TextView 
   android:id="@+id/mnc"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   />
<TextView 
   android:id="@+id/cid"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   />
<TextView 
   android:id="@+id/lac"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   />
<TextView 
   android:id="@+id/geo"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   />
<TextView 
   android:id="@+id/remark"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   />
<Button 
   android:id="@+id/viewmap"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="View Map"
   />
</LinearLayout>

No comments:

Post a Comment