2012-03-18 107 views
1

我正在处理接近警报的应用程序。我可以添加接近警报,但无法删除这些接近警报。我已经在手机和虚拟设备上尝试了我的代码,但无法删除它们。Android删除接近警报

这里是我的代码:

哪里保存到数据库和接近警报位置添加

saveButton.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 
         String title = titleText.getText().toString(); 
         if(title.matches("")){ 
          Toast.makeText(CurrentLocationActivity.this,"Please provide a Title",Toast.LENGTH_SHORT).show(); 
         } 
         else{ 
          saveLocation(saveProximityAlertPoint(title));            
          setResult(RESULT_OK);          
          Toast.makeText(CurrentLocationActivity.this,"Location Saved",Toast.LENGTH_SHORT).show();  
         } 
        } 
       }); 

    private void saveLocation(int unique_location_id) { 
       if (location == null) { 
        Toast.makeText(this, "No last known location",Toast.LENGTH_LONG).show(); 
        return ; 
       } 
       else{ 
        String title = titleText.getText().toString();      
        String type = typeSpinner.getSelectedItem().toString();           
        range = (int) (radius + POINT_RADIUS);  
        int unique_id = unique_location_id;  
        Double latitude = location.getLatitude(); 
        Double longitude = location.getLongitude(); 

        location_id = mDbHelper.createLocation(title, type, range, unique_id, latitude, longitude); 

        titleText.setText(""); 
        radiusBar.setProgress(0); 
       } 
      } 

    private int saveProximityAlertPoint(String title) { 
       if (location == null) { 
        Toast.makeText(this, "No last known location.",Toast.LENGTH_LONG).show(); 
        return 0; 
       } 
       else{ 
        Double latitudeProxAlert = location.getLatitude(); 
        Double longitudeProxAlert = location.getLongitude(); 
        int unique_location_id = addProximityAlert(latitudeProxAlert, longitudeProxAlert, title); 

        return unique_location_id; 
       } 
      } 

    private int addProximityAlert(double latitude, double longitude, String title) { 

       Intent intent = new Intent(PROX_ALERT_INTENT); 
       intent.putExtra(LOCAION_TITLE, title); 

       PendingIntent proximityIntent = PendingIntent.getBroadcast(this, ++pending_intent_unique_id , intent, 0); 

       locationManager.addProximityAlert(latitude, longitude, range, PROX_ALERT_EXPIRATION, proximityIntent); 

       IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT); 
       registerReceiver(new ProximityIntentReceiver(), filter); 
       Toast.makeText(this, "Proximity has been added for " + title + " with unique_id " + pending_intent_unique_id, 
         Toast.LENGTH_LONG).show(); 

       SharedPreferences.Editor editor = preferences.edit(); 
       editor.putInt("UNIQUEID", pending_intent_unique_id); 
       editor.commit(); 
       return pending_intent_unique_id; 
      } 

,并在那里我试图删除接近提醒

public boolean onContextItemSelected(MenuItem item) {     
      switch(item.getItemId()) { 
      case R.id.menu_delete: 
       AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 

       Cursor proxRemoveCursor = mDbHelper.fetchLocation(info.id); 
       removeProximityAlert(proxRemoveCursor.getInt(proxRemoveCursor.getColumnIndexOrThrow(DBAdapter.KEY_UNIQUE_LOCATION_ID))); 

       mDbHelper.deleteLocation(info.id); 

       proxRemoveCursor.close(); 

       return true; 
} 

    private void removeProximityAlert(int unique_id) { 

      String context = Context.LOCATION_SERVICE; 
      LocationManager locationManager = (LocationManager) getSystemService(context); 

      Intent anIntent = new Intent(REMOVE_PROXIMITY); 
      PendingIntent operation = 
       PendingIntent.getBroadcast(getApplicationContext(), unique_id , anIntent, 0); 
      locationManager.removeProximityAlert(operation); 
     } 
     } 

这是其他活动的活动一点点长的代码,但这是把我的问题正确的最短途径。 thnx的帮助。

回答

3

解决了!问题是我发送给addProximityAlert()removeProximityAlert()上的intent对象的操作不匹配。现在我可以在纠正我的错误后删除接近警报。

+0

你能显示你的最终代码,所以我可以看到你是如何解决你的问题吗? – deucalion0 2013-03-10 16:12:18

+1

Intent anIntent = new Intent(REMOVE_PROXIMITY);意图intent =新意图(PROX_ALERT_INTENT);.我的最终代码在那里。问题是; REMOVE_PROXIMITY和PROX_ALERT_INTENT应该匹配。当我第一次尝试时,他们是不同的。当它们相同时,您可以删除接近警报。 – mkeremkeskin 2013-03-11 15:17:25

+0

欢呼声回复我,我花了几个星期试图解决这个问题! – deucalion0 2013-03-13 21:57:09

0

REMOVE_PROXIMITY的值是多少?