2017-01-08 8 views
1

私はイベントを追跡するためにジオフェンスを使用するアプリケーションを作成しています。アラームマネージャを作成したいと思います。アラームマネージャは毎日起動し、データベースから取った日常のイベントにジオフェンスを追加します。ジオフェンスを使用するためのアクティビティを作成する必要があり、このアクティビティではBroadcastReceiverを配置しました。それはまったく動かないようです。私はこの洞察から何のログも得ていない。なぜか分かりませんが、マニフェストではsthが間違っていると思います。私は誰かがこれを見ることに感謝します。アラームマネージャが動作しません

クラスMyScheduler:BroadcastReceiverと

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); 
    } 
} 

タスク:

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); 
} 

とマニフェストの一部:

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

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

私はジオフェンスとすべてがうまく機能することを、追加することができますので、私は上記のジオファンスコードを読んだほうが簡単なので入れなかった。誰かが手伝ってくれることを願っています! :)

答えて

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

感謝回答。これが私が最初に試したことですが、放送受信機での他の活動からのジオフェンシング方法の使い方はわかりませんでした。私はそれが非常にばかげた質問かもしれないことを知っていますが、私はJavaでの経験がありません。だから私はその活動を放送する方法を見つけたのです。 – Natalia

+0

簡単に言えば、それはうまくいかないでしょう。私はあなたが「他の活動からのジオフェンシング方法を使用する」ことを意味するものではありませんが、「活性化された毎日を構成し、(データーベースから取られた)日常の出来事のためのジオフェンスを追加する」機能はすべてスタンドアロンの放送受信機になければなりません。 –

+0

ねえ、私は馬鹿だった、ありがとう。なぜこの問題があったのか分かりません。どうもありがとう ;) – Natalia

関連する問題