Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > Mobile > Mobile Forum > สอบถามเกี่ยวกับการเขียน Android Geofencing ครับ รันได้ ไม่มี Error แต่ไม่มีการแจ้งเตือนใดๆ



 

สอบถามเกี่ยวกับการเขียน Android Geofencing ครับ รันได้ ไม่มี Error แต่ไม่มีการแจ้งเตือนใดๆ

 



Topic : 121401



โพสกระทู้ ( 3 )
บทความ ( 0 )



สถานะออฟไลน์




ผมลองเขียนโค้ด geofence ในโปรแกรม Android Studio สามารถรันได้ ไม่มี Error แต่ไม่มี Notification แจ้งเตือนเลย ทั้งเวลาเดินเข้า ขณะอยู่ และเดินออกจากพิกัด รบกวนทีครับ

MainActivity

Code (Android-Java)
package com.example.crmtracking.fromweb;

import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.location.Geofence;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnCameraChangeListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.CircleOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

import java.util.ArrayList;


public class MainActivity extends FragmentActivity implements OnCameraChangeListener {
    
    private GoogleMap mMap;

   
    ArrayList<Geofence> mGeofences;

    
    ArrayList<LatLng> mGeofenceCoordinates;

    
    ArrayList<Integer> mGeofenceRadius;

    
    private GeofenceStore mGeofenceStore;
  

    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        GoogleMap mMap = ((SupportMapFragment)getSupportFragmentManager()
                .findFragmentById(R.id.map)).getMap();

        mMap.addMarker(new MarkerOptions().position(
                new LatLng(13.729468, 100.779361))
                .title("คณะวิทยาศาสตร์"));
        mMap.addMarker(new MarkerOptions().position(
                new LatLng(13.726566, 100.780104))
                .title("คณะเทคโนโลยีการเกษตร"));
        mMap.addMarker(new MarkerOptions().position(
                new LatLng(13.725534, 100.776338))
                .title("คณะสถาปัตยกรรมศาสตร์"));
        mMap.addMarker(new MarkerOptions().position(
                new LatLng(13.727108, 100.773323))
                .title("คณะวิศวะกรรมศาสตร์"));
       


        
        mGeofences = new ArrayList<Geofence>();
        mGeofenceCoordinates = new ArrayList<LatLng>();
        mGeofenceRadius = new ArrayList<Integer>();


        
        mGeofenceCoordinates.add(new LatLng(13.729468, 100.779361)); //วิทยาศาสตร์
        mGeofenceCoordinates.add(new LatLng(13.726566, 100.780104)); //เทคโนโลยีการเกษตร
        mGeofenceCoordinates.add(new LatLng(13.725534, 100.776338)); //สถาปัตยกรรมศาสตร์
        mGeofenceCoordinates.add(new LatLng(13.727108, 100.773323)); //วิศวะกรรมศาสตร์
     

        
        mGeofenceRadius.add(120);
        mGeofenceRadius.add(120);
        mGeofenceRadius.add(120);
        mGeofenceRadius.add(120);
        
        

        // วิทยาศาสตร์
        mGeofences.add(new Geofence.Builder()
                .setRequestId("คณะวิทยาศาสตร์")
                        
                .setCircularRegion(mGeofenceCoordinates.get(0).latitude, mGeofenceCoordinates.get(0).longitude, mGeofenceRadius.get(0).intValue())
                .setExpirationDuration(Geofence.NEVER_EXPIRE)
                        
                .setLoiteringDelay(30000)
                .setTransitionTypes(
                        Geofence.GEOFENCE_TRANSITION_ENTER
                                | Geofence.GEOFENCE_TRANSITION_DWELL
                                | Geofence.GEOFENCE_TRANSITION_EXIT).build());


        // เทคโนโลยีการเกษตร
        mGeofences.add(new Geofence.Builder()
                .setRequestId("คณะเทคโนโลยีการเกษตร")
                        
                .setCircularRegion(mGeofenceCoordinates.get(1).latitude, mGeofenceCoordinates.get(1).longitude, mGeofenceRadius.get(1).intValue())
                .setExpirationDuration(Geofence.NEVER_EXPIRE)
                        
                .setLoiteringDelay(30000)
                .setTransitionTypes(
                        Geofence.GEOFENCE_TRANSITION_ENTER
                                | Geofence.GEOFENCE_TRANSITION_DWELL
                                | Geofence.GEOFENCE_TRANSITION_EXIT).build());

        // สถาปัตยกรรมศาสตร์
        mGeofences.add(new Geofence.Builder()
                .setRequestId("คณะสถาปัตยกรรมศาสตร์")
                        
                .setCircularRegion(mGeofenceCoordinates.get(2).latitude, mGeofenceCoordinates.get(2).longitude, mGeofenceRadius.get(2).intValue())
                .setExpirationDuration(Geofence.NEVER_EXPIRE)
                .setLoiteringDelay(30000)
                .setTransitionTypes(
                        Geofence.GEOFENCE_TRANSITION_ENTER
                                | Geofence.GEOFENCE_TRANSITION_DWELL
                                | Geofence.GEOFENCE_TRANSITION_EXIT).build());

        // วิศวะกรรมศาสตร์
        mGeofences.add(new Geofence.Builder()
                .setRequestId("คณะวิศวะกรรมศาสตร์")
                        
                .setCircularRegion(mGeofenceCoordinates.get(3).latitude, mGeofenceCoordinates.get(3).longitude, mGeofenceRadius.get(3).intValue())
                .setExpirationDuration(Geofence.NEVER_EXPIRE)
                .setLoiteringDelay(30000)
                .setTransitionTypes(
                        Geofence.GEOFENCE_TRANSITION_ENTER
                                | Geofence.GEOFENCE_TRANSITION_DWELL
                                | Geofence.GEOFENCE_TRANSITION_EXIT).build());

       


        
        mGeofenceStore = new GeofenceStore(this, mGeofences);

        btnShow = (Button) findViewById(R.id.Bsearch);
    }

    @Override
    protected void onStart() {

        super.onStart();
    }

    @Override
    protected void onStop() {
        mGeofenceStore.disconnect();
        super.onStop();


    }

    @Override
    protected void onResume() {
        super.onResume();
        if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(this) == ConnectionResult.SUCCESS) {
            setUpMapIfNeeded();
        } else {
            GooglePlayServicesUtil.getErrorDialog(
                    GooglePlayServicesUtil.isGooglePlayServicesAvailable(this),
                    this, 0);
        }
    }

    private void setUpMapIfNeeded() {
       
        if (mMap == null) {
            
            mMap = ((SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map)).getMap();

            
            if (mMap != null) {
                setUpMap();
            }
        }
    }

  

    public void Onclick(View v) {


        Context g1 = getApplicationContext();
        String g2 = "คุณอยู่ในคณะวิทยาศาสตร์";
        int g3 = Toast.LENGTH_LONG;
        Toast g = Toast.makeText(g1, g2, g3);


        Context t1 = getApplicationContext();
        String t2 = "คุณไม่ได้อยู่ในคณะวิทยาศาสตร์";
        int t3 = Toast.LENGTH_LONG;
        Toast t = Toast.makeText(t1, t2, t3);

        Context a1 = getApplicationContext();
        String a2 = "คุณอยู่ในคณะเทคโนโลยีการเกษตร";
        int a3 = Toast.LENGTH_LONG;
        Toast a = Toast.makeText(a1, a2, a3);

        Context b1 = getApplicationContext();
        String b2 = "คุณไม่ได้อยู่ในคณะเทคโนโลยีการเกษตร";
        int b3 = Toast.LENGTH_LONG;
        Toast b = Toast.makeText(b1, b2, b3);

        Context c1 = getApplicationContext();
        String c2 = "คุณอยู่ในคณะสถาปัตยกรรมศาสตร์";
        int c3 = Toast.LENGTH_LONG;
        Toast c = Toast.makeText(c1, c2, c3);

        Context d1 = getApplicationContext();
        String d2 = "คุณไม่ได้อยู่ในคณะสถาปัตยกรรมศาสตร์";
        int d3 = Toast.LENGTH_LONG;
        Toast d = Toast.makeText(d1, d2, d3);

        Context e1 = getApplicationContext();
        String e2 = "คุณอยู่ในคณะวิศวะกรรมศาสตร์";
        int e3 = Toast.LENGTH_LONG;
        Toast e = Toast.makeText(e1, e2, e3);

        Context f1 = getApplicationContext();
        String f2 = "คุณไม่ได้อยู่ในคณะวิศวะกรรมศาสตร์";
        int f3 = Toast.LENGTH_LONG;
        Toast f = Toast.makeText(f1, f2, f3);


    }


    private void setUpMap() {
       
        
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(13.729468, 100.779361), 16));
        mMap.setIndoorEnabled(false);
        mMap.setMyLocationEnabled(true);

        mMap.setOnCameraChangeListener(this);

    }


    
    @Override
    public void onCameraChange(CameraPosition position) {
        



        for(int i = 0; i < mGeofenceCoordinates.size(); i++)
        {

            mMap.addCircle(new CircleOptions()
                    .center(mGeofenceCoordinates.get(i))
                    .radius(mGeofenceRadius.get(i).intValue())
                    .fillColor(0x40ff0000)
                    .strokeColor(Color.TRANSPARENT)
                    .strokeWidth(2));


        }


    }


}





GeofenceStore

Code (Android-Java)
package com.example.crmtracking.fromweb;

import java.util.ArrayList;

import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.os.Bundle;
import android.util.Log;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
import com.google.android.gms.common.api.PendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.Geofence;
import com.google.android.gms.location.GeofencingRequest;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;

public class GeofenceStore implements ConnectionCallbacks,
        OnConnectionFailedListener, ResultCallback<Status>, LocationListener {

    private final String TAG = this.getClass().getSimpleName();

    
    private Context mContext;

   
    private GoogleApiClient mGoogleApiClient;

   
    private PendingIntent mPendingIntent;

   
    private ArrayList<Geofence> mGeofences;

   
    private GeofencingRequest mGeofencingRequest;

    
    private LocationRequest mLocationRequest;

   
    public GeofenceStore(Context context, ArrayList<Geofence> geofences) {
        mContext = context;
        mGeofences = new ArrayList<Geofence>(geofences);
        mPendingIntent = null;

        
        mGoogleApiClient = new GoogleApiClient.Builder(context)
                .addApi(LocationServices.API).addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this).build();

        
        mLocationRequest = new LocationRequest();
        
        mLocationRequest.setInterval(10000);
        
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

        mGoogleApiClient.connect();
    }

    @Override
    public void onResult(Status result) {
        if (result.isSuccess()) {
            Log.v(TAG, "Success!");
        } else if (result.hasResolution()) {
            // TODO Handle resolution
        } else if (result.isCanceled()) {
            Log.v(TAG, "Canceled");
        } else if (result.isInterrupted()) {
            Log.v(TAG, "Interrupted");
        } else {

        }

    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        Log.v(TAG, "Connection failed.");
    }

    @Override
    public void onConnected(Bundle connectionHint) {
        
        mGeofencingRequest = new GeofencingRequest.Builder().addGeofences(
                mGeofences).build();

        mPendingIntent = createRequestPendingIntent();

      
        LocationServices.FusedLocationApi.requestLocationUpdates(
                mGoogleApiClient, mLocationRequest, this);

        
        PendingResult<Status> pendingResult = LocationServices.GeofencingApi
                .addGeofences(mGoogleApiClient, mGeofencingRequest,
                        mPendingIntent);

        
        pendingResult.setResultCallback(this);
    }

    @Override
    public void onConnectionSuspended(int cause) {
        Log.v(TAG, "Connection suspended.");
    }

    
    private PendingIntent createRequestPendingIntent() {
        if (mPendingIntent == null) {
            Log.v(TAG, "Creating PendingIntent");
            Intent intent = new Intent(mContext, GeofenceIntentService.class);
            mPendingIntent = PendingIntent.getService(mContext, 0, intent,
                    PendingIntent.FLAG_UPDATE_CURRENT);
        }

        return mPendingIntent;
    }

    @Override
    public void onLocationChanged(Location location) {

        Log.v(TAG, "Location Information\n"
                + "==========\n"
                + "Provider:\t" + location.getProvider() + "\n"
                + "Lat & Long:\t" + location.getLatitude() + ", "
                + location.getLongitude() + "\n"
                + "Altitude:\t" + location.getAltitude() + "\n"
                + "Bearing:\t" + location.getBearing() + "\n"
                + "Speed:\t\t" + location.getSpeed() + "\n"
                + "Accuracy:\t" + location.getAccuracy() + "\n");
    }

    public void disconnect() {
        mGoogleApiClient.disconnect();
    }
}





GeofenceIntentService

Code (Android-Java)
package com.example.crmtracking.fromweb;

import android.app.IntentService;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.support.v4.app.NotificationCompat;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;

import com.google.android.gms.location.Geofence;
import com.google.android.gms.location.GeofencingEvent;

import java.util.List;


public class GeofenceIntentService extends IntentService  {
    private final String TAG = this.getClass().getCanonicalName();

    public GeofenceIntentService() {
        super("GeofenceIntentService");
        Log.v(TAG, "Constructor.");
    }

    public void onCreate() {
        super.onCreate();
        Log.v(TAG, "onCreate");
    }

    public void onDestroy() {
        super.onDestroy();
        Log.v(TAG, "onDestroy");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        Context not = getApplicationContext();
        String nnn = "คุณเดินออกจากคณะ";
        int durater = Toast.LENGTH_LONG;
        Toast t = Toast.makeText(not, nnn, durater);

        Context inn = getApplicationContext();
        String kkk = "คุณเดินเข้าคณะ";
        int rrr = Toast.LENGTH_LONG;
        Toast g = Toast.makeText(inn, kkk, rrr);

        Context zn = getApplicationContext();
        String zz = "คุณอยู่ในคณะ";
        int zzz = Toast.LENGTH_LONG;
        Toast z = Toast.makeText(zn, zz, zzz);

        GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
        Log.v(TAG, "onHandleIntent");
        if(!geofencingEvent.hasError()) {
            int transition = geofencingEvent.getGeofenceTransition();
            String notificationTitle;

            switch(transition) {
                case Geofence.GEOFENCE_TRANSITION_ENTER:
                    notificationTitle = "Geofence Entered";
                    Log.v(TAG, "Geofence Entered");
                    g.show();
                    break;
                case Geofence.GEOFENCE_TRANSITION_DWELL:
                    notificationTitle = "Geofence Dwell";
                    Log.v(TAG, "Dwelling in Geofence");
                    z.show();
                    break;
                case Geofence.GEOFENCE_TRANSITION_EXIT:
                    notificationTitle = "Geofence Exit";
                    Log.v(TAG, "Geofence Exited");
                    t.show();
                    break;
                default:
                    notificationTitle = "Geofence Unknown";
            }

            sendNotification(this, getTriggeringGeofences(intent), notificationTitle);
        }
    }

    private void sendNotification(Context context, String notificationText,
                                  String notificationTitle) {

        PowerManager pm = (PowerManager) context
                .getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wakeLock = pm.newWakeLock(
                PowerManager.PARTIAL_WAKE_LOCK, "");
        wakeLock.acquire();

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(
                context)
                .setContentTitle(notificationTitle)
                .setContentText(notificationText)
                .setDefaults(Notification.DEFAULT_ALL)
                .setAutoCancel(true);

        NotificationManager notificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(1000, notificationBuilder.build());

        wakeLock.release();
    }

    private String getTriggeringGeofences(Intent intent) {
        GeofencingEvent geofenceEvent = GeofencingEvent.fromIntent(intent);
        List<Geofence> geofences = geofenceEvent
                .getTriggeringGeofences();

        String[] geofenceIds = new String[geofences.size()];

        for (int i = 0; i < geofences.size(); i++) {
            geofenceIds[i] = geofences.get(i).getRequestId();
        }

        return TextUtils.join(", ", geofenceIds);
    }
}




Tag : Mobile, Android, JAVA, Mobile







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2016-02-14 17:34:45 By : ithikom5004 View : 1397 Reply : 1
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ไม่ลอง Debug ดูครับ ว่ามันทำงานในส่วนควรที่จะทำหรือไม่






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-02-17 10:09:01 By : mr.win
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามเกี่ยวกับการเขียน Android Geofencing ครับ รันได้ ไม่มี Error แต่ไม่มีการแจ้งเตือนใดๆ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่