2017-01-08 4 views
1

저는 지오 펜스를 사용하여 이벤트를 추적하는 응용 프로그램을 만들고 있으며, 매일 활성화되고 데이터베이스에서 가져온 일상 이벤트에 대한 지오 펜스를 추가하는 알람 관리자를 만들고 싶습니다. 지오 펜스를 사용하기위한 활동을 만들어야했고,이 활동에서 BroadcastReceiver를 넣었습니다. 그것은 전혀 작동하지 않는 것 같습니다. 이 avtivities에서 어떤 통나무조차 얻지 않는다조차. 왜 그런지 모르겠지만, 매니 페스트에서 sth가 잘못되었을 수도 있습니다. 나는 누군가가 이것을 보았을 것에 감사 할 것입니다.알람 관리자가 작동하지 않습니다.

클래스 MyScheduler : 브로드 캐스트 리시버와

public class MyScheduler extends Activity { 


protected static final String TAG = "MyScheduler"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    Log.i(TAG, "onCreate"); 
    super.onCreate(savedInstanceState); 
    setRecurringAlarm(this); 
} 

private void setRecurringAlarm(Context context) { 

    Log.i(TAG, "setReccuringAlarm"); 
    Calendar updateTime = Calendar.getInstance(); 
    updateTime.setTimeZone(TimeZone.getTimeZone("GMT+1:00")); 
    updateTime.set(Calendar.HOUR_OF_DAY, 15); 
    updateTime.set(Calendar.MINUTE, 10); 

    Intent intent = new Intent(context, Tasks.class); 
    PendingIntent recurringDownload = PendingIntent.getBroadcast(context, 
      0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
    AlarmManager alarms = (AlarmManager) this.getSystemService(
      Context.ALARM_SERVICE); 
    alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP, 
      updateTime.getTimeInMillis(), 
      AlarmManager.INTERVAL_DAY, recurringDownload); 
    } 
} 

작업 : 그래서 지오 펜스에 모든 것이 잘 작동하는지

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <activity android:name=".MyScheduler"/> 
    <activity android:name=".Tasks"/> 

    <receiver android:name=".Tasks" > 
    </receiver> 

내가 추가 할 수 있습니다 :

public class Tasks extends Activity 
implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, ResultCallback<Status> { 
Context context; 
final public static String ONE_TIME = "onetime"; 

EventDAO eventDAO; 

protected static final String TAG = "MyGeofence"; 

Calendar calendar = Calendar.getInstance(); 
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
String today = dateFormat.format(calendar.getTime()); 
List<Event> eventsList; 

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

    context = getApplicationContext(); 

    mGeofenceList = new ArrayList<Geofence>(); 
    mGeofencePendingIntent = null; 
    mSharedPreferences = getSharedPreferences(Constants.SHARED_PREFERENCES_NAME, 
      MODE_PRIVATE); 
    mGeofencesAdded = mSharedPreferences.getBoolean(Constants.GEOFENCES_ADDED_KEY, false); 

    buildGoogleApiClient(); 
} 

/// geofences mathods, not needed 

BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override 

    public void onReceive(Context context, Intent intent) { 
     Log.i(ONE_TIME, "Executed Tasks.Java File"); 
     //Some task here for every morning 
     eventDAO = new EventDAO(context); 
     eventsList = eventDAO.getComingEvents(today, today); 

     for(Event event : eventsList){ 
      String place = event.getEndLocalisationX(); 
      Log.i(ONE_TIME, place); 

      Double lat = Double.parseDouble(event.getEndLocalisationY()); 
      Double lng = Double.parseDouble(event.getEndLocalisationX()); 
      MY_PLACES.put(place, new LatLng(lat, lng)); 
     } 

     populateGeofenceList(); 
     addGeofences(); 
    } 
}; 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    unregisterReceiver(broadcastReceiver); 
} 

그리고 매니페스트의 일부 위의 지오 코딩 코드는 읽지 않기 때문에 작성하지 않았습니다. 누군가가 도울 수 있기를 바랍니다! :)

답변

2

브로드 캐스트를 보내기 위해 PendingIntent를 만들고 있지만 작업 클래스 (작업)를 지정했습니다. Android가 허용하는 경우 UI를 사용하여 사용자를 방해하도록 경보를 설정해서는 안됩니다.

public class TasksReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    Log.i(ONE_TIME, "Executed Tasks.Java File"); 
    //Some task here for every morning 
    EventDAO eventDAO = new EventDAO(context); 
    List<Event> eventsList = eventDAO.getComingEvents(today, today); 

    for(Event event : eventsList){ 
     String place = event.getEndLocalisationX(); 
     Log.i(ONE_TIME, place); 

     Double lat = Double.parseDouble(event.getEndLocalisationY()); 
     Double lng = Double.parseDouble(event.getEndLocalisationX()); 
     MY_PLACES.put(place, new LatLng(lat, lng)); 
    } 

    populateGeofenceList(); 
    addGeofences(); 
    } 
} 

과 같을 것이다 보류중인 의도와 매니페스트 수신기 선언 클래스의 이름을 지정합니다 : 당신은 TasksReceiver로 외부 클래스에 방송 수신기를 이동해야합니다에 대한

<receiver android:name=".TasksReceiver" /> 
+0

감사합니다 대답. 이것이 내가 처음에 시도한 것이지만, 브로드 캐스팅 수신기의 다른 활동에서 지오 코딩 방법을 사용하는 방법을 알지 못했습니다. 나는 그것이 매우 어리석은 질문이 될 수 있지만, 나는 자바에 대한 경험이 없다는 것을 알고있다. 그래서 내가 방송 활동을하는 방법을 발견했다. – Natalia

+0

간단히 말해서 작동하지 않을 것입니다. 나는 "다른 활동에서 지오 펜싱 방법을 사용하라"는 것이 무엇을 의미하는지 알지 못하지만 어떤 기능이 "활성화 된 매일"을 구성하고 독립된 방송 수신기에있을 필요가있는 현재 날짜 이벤트에 대한 지오 펜스를 추가합니다. –

+0

네, 바보 같았습니다. 고마워요. 나는 왜 내가이 문제가 있었는지 모르겠다. 고마워요;) – Natalia

관련 문제