2013-05-07 4 views
3

Я пытаюсь настроить самое основное оповещение о близости, но ничего не происходит. Я довольно новичок в программировании на Android, поэтому, пожалуйста, дайте мне знать, что я делаю неправильно или что мне не хватает. Меня вдохновили некоторые исходные коды и this one. Вот мой код:Android GPS близорукость не работает

package com.example.proximityalert; 

import android.location.LocationManager; 
import android.os.Bundle; 
import android.app.Activity; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 

public class MainActivity extends Activity { 

    private static final String PROX_ALERT_INTENT = "com.example.proximityalert"; 
    private IntentReceiver locationReminderReceiver; 

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


     Intent intent = new Intent(PROX_ALERT_INTENT); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 

     LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
     locationManager.addProximityAlert(55.586301,13.045417, 200, -1, pendingIntent); 

     this.locationReminderReceiver = new IntentReceiver(); 

     final IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT); 
     this.registerReceiver(this.locationReminderReceiver, filter); 

    } 
} 

и приемник

package com.example.proximityalert; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.location.LocationManager; 
import android.util.Log; 
import android.widget.Toast; 

public class IntentReceiver extends BroadcastReceiver{ 

//  @SuppressWarnings("deprecation") 
     @Override 
     public void onReceive(Context context, Intent intent) { 


      String key = LocationManager.KEY_PROXIMITY_ENTERING; 

      Boolean entering = intent.getBooleanExtra(key, false); 

      if (entering) { 
       Toast.makeText(context, "LocationReminderReceiver entering", Toast.LENGTH_SHORT).show(); 
       Log.i("LocationReminderReceiver", "entering"); 
      } else { 
       Toast.makeText(context, "LocationReminderReceiver exiting", Toast.LENGTH_SHORT).show(); 
       Log.i("LocationReminderReceiver", "exiting"); 
      } 
     } 
    } 
+0

пытаются переместить свое намерение и pendingintent к после того, как вы registerReciever – JRowan

+0

я изменил его на это, и до сих пор ничего .. 'this.locationReminderReceiver = новый IntentReceiver(); \t \t \t \t Фильтр IntentFilter = новый IntentFilter (PROX_ALERT_INTENT); \t \t this.registerReceiver (this.locationReminderReceiver, filter); \t \t \t \t Цель намерения = новое намерение (PROX_ALERT_INTENT); \t \t PendingIntent pendingIntent = PendingIntent.getBroadcast (MainActivity.this, 0, intent, PendingIntent.FLAG_ONE_SHOT); \t \t LocationManager locationManager = (LocationManager) this.getSystemService (Context.LOCATION_SERVICE); \t \t locationManager.addProximityAlert (55.586301,13.045417, 200, -1, pendingIntent); ' –

+0

шахтных работы и только различие это я PendingIntent.FLAG_CANCEL_CURRENT вместо PendingIntent.FLAG_ONE_SHOT и им запустить его в службе – JRowan

ответ

1

Это сервис, который я использую, чтобы получать оповещения о приближении, ваш можете использовать его, он не нужен приемник в манифесте, просто сервис

import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.app.Service; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.database.Cursor; 
import android.graphics.Color; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.Toast; 


public class ProximityService extends Service{ 
String proximitysd = "com.apps.ProximityService"; 
int n = 0; 
private BroadcastReceiver mybroadcast; 
private LocationManager locationManager; 
MyLocationListener locationListenerp; 
public ProximityService() { 


} 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 
@Override 
public void onCreate() { 
    mybroadcast = new ProximityIntentReceiver(); 
    locationManager = (LocationManager) 
      getSystemService(Context.LOCATION_SERVICE); 





    double lat; 
    double lng; 
    float radius = 50f; 
    long expiration = -1; 
    MyDBAdapter db = new MyDBAdapter(this); 
     Cursor cursor; 
     db.read(); 
     cursor = db.getAllEntries(); 
     boolean go = cursor.moveToFirst(); 
     while(cursor.isAfterLast() != true){ 
      lat = cursor.getInt(MyDBAdapter.LATITUDE_COLUMN)/1E6; 
      lng = cursor.getInt(MyDBAdapter.LONGITUDE_COLUMN)/1E6; 
      String what = cursor.getString(MyDBAdapter.ICON_COLUMN); 
      String how = cursor.getString(MyDBAdapter.FISH_COLUMN); 
      String proximitys = "com.apps.ProximityService" + n; 
      IntentFilter filter = new IntentFilter(proximitys); 
      registerReceiver(mybroadcast, filter); 

      Intent intent = new Intent(proximitys); 

      intent.putExtra("alert", what); 
      intent.putExtra("type", how); 
      PendingIntent proximityIntent = PendingIntent.getBroadcast(this, n, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
      locationManager.addProximityAlert(lat, lng, radius, expiration, proximityIntent); 
      //sendBroadcast(new Intent(intent)); 

      n++; 
      cursor.moveToNext(); 
     } 
     db.close(); 
     cursor.close(); 
} 

@Override 
public void onDestroy() { 
    Toast.makeText(this, "Proximity Service Stopped", Toast.LENGTH_LONG).show(); 
    try{ 
     unregisterReceiver(mybroadcast); 
    }catch(IllegalArgumentException e){ 
     Log.d("reciever",e.toString()); 
    } 


} 
@Override 
public void onStart(Intent intent, int startid) { 
    Toast.makeText(this, "Proximity Service Started", Toast.LENGTH_LONG).show(); 
    //IntentFilter filter = new IntentFilter(proximitys); 
    //registerReceiver(mybroadcast,filter); 


} 
public class ProximityIntentReceiver extends BroadcastReceiver{ 
    private static final int NOTIFICATION_ID = 1000; 
    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     String key = LocationManager.KEY_PROXIMITY_ENTERING; 

     Boolean entering = arg1.getBooleanExtra(key, false); 
     String here = arg1.getExtras().getString("alert"); 
     String happy = arg1.getExtras().getString("type"); 



     NotificationManager notificationManager = 
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

       PendingIntent pendingIntent = PendingIntent.getActivity(arg0, 0, arg1, 0);   

       Notification notification = createNotification(); 

       notification.setLatestEventInfo(arg0, 
        "Entering Proximity!", "You are approaching a " + here + " marker.", pendingIntent); 

       notificationManager.notify(NOTIFICATION_ID, notification); 


      } 

      private Notification createNotification() { 
       Notification notification = new Notification(); 

       notification.icon = R.drawable.icon; 
       notification.when = System.currentTimeMillis(); 

       notification.flags |= Notification.FLAG_AUTO_CANCEL; 
       notification.flags |= Notification.FLAG_SHOW_LIGHTS; 

       notification.defaults |= Notification.DEFAULT_VIBRATE; 
       notification.defaults |= Notification.DEFAULT_LIGHTS; 

       notification.ledARGB = Color.WHITE; 
       notification.ledOnMS = 1500; 
       notification.ledOffMS = 1500; 


       return notification; 
      } 
     //make actions 



} 
public class MyLocationListener implements LocationListener { 
     public void onLocationChanged(Location location) { 
      Toast.makeText(getApplicationContext(), "I was here", Toast.LENGTH_LONG).show(); 
     } 

     public void onProviderDisabled(String s) { 
     } 
     public void onProviderEnabled(String s) {    
     } 
     @Override 
     public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
      // TODO Auto-generated method stub 

     } 
    } 

} 

вам придется заменить запрос к базе данных и часть коды, чтобы соответствовать приложению, это для предупреждения множественных непрямого вот почему существует приращение п.

+0

, поэтому я удалил связанные с db вещи и дополнения, установил координаты, определил службу в манифесте и все еще Ничего не произошло. Он показывает тост, что услуга началась, но никакого уведомления или чего-либо по близости. Я также попробовал это по телефону и установил координацию с fakegps. У меня нет абсолютно никакой идеи, почему он не работает ' –

+0

Я не думаю, что это работает в эмуляторе, это работает, я знаю, что он делает это на рынке правильно теперь – JRowan

+0

я узнал, почему он не работал. когда задано оповещение о близости, оно установлено (lat, lng), но в DDMS они меняются на противоположные :))) –

Смежные вопросы