2017-01-17 8 views
0

コード全体を調べたところ、すべて正常に動作しているようですが、エラーがないので解決策を見つけるのがさらに難しくなります。コードを別のプロジェクトに移動した後で放送受信機が動作しない

コードを別のプロジェクトに移動しました。ここで

は私の放送受信機のクラスである:

public class MyBroadcastReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    Notification.Builder builder = new Notification.Builder(context); 
    builder.setContentTitle(intent.getStringExtra("Next")); 
    builder.setContentText(intent.getStringExtra("String")); 
    builder.setSmallIcon(R.drawable.notify); 

    NotificationManager notificationManager = 
      (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(325, builder.build()); 
} 
} 

私はそうのように私のメインの活動でそれを呼び出す:

private void notifyUser() { 
    Intent intent = new Intent(this, MyBroadcastReceiver.class); 
    intent.putExtra("Next", getResources().getString(R.string.lesson_next)); 

    int days_int = (sun) ? 1:2; 

    for (int i = 0; i < days_length; i++) { 
     Calendar[] calendars = getCalendars(i, days_int + i); 
     ArrayList<String> arrayList = schedules.get(i); 
     for (int j = 0; j < calendars.length; j++) { 
      String s = arrayList.get(j); 
      if (!s.equals(getResources().getString(R.string.lesson_window))) { 
       intent.putExtra("String", s); 
       notifyUserTag(intent, 135124 + count, calendars[j].getTimeInMillis()); 
       count++; 
      } 
     } 
    } 
} 

private void notifyUserTag(Intent intent, int id, long currentTimeMillis) { 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
      this.getApplicationContext(), id, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, currentTimeMillis, 
      AlarmManager.INTERVAL_DAY * 7, pendingIntent); 
} 

private Calendar[] getCalendars(int i, int day) { 
    int[] nums = lessonNum(schedules.get(i)); int len = nums.length; 
    Calendar[] calendars = new Calendar[len]; 
    for (int k = 0; k < len; k++) 
     calendars[k] = setCalendar(nums[k], day); 
    return calendars; 
} 

private int[] lessonNum(ArrayList<String> stringArrayList) { 
    int size = stringArrayList.size(); 
    int[] nums = new int[size]; 
    for (int i = 0; i < size; i++) 
     nums[i] = lessonNumTry(i, stringArrayList); 
    return nums; 
} 

private int lessonNumTry(int i, ArrayList<String> arrayList) { 
    try { 
     if (Integer.parseInt(arrayList.get(i).substring(1,2)) == 0) 
      return 10; 
    } 
    catch (NumberFormatException e) { 
     return Integer.parseInt(arrayList.get(i).substring(0,1)); 
    } 
    return -1; 
} 

private Calendar setCalendar(int i, int day) { 
    Calendar calendar = Calendar.getInstance(); 
    switch (i) { 
     case 0: 
      calHelper(calendar, day, 6, 0); 
      break; 
     case 1: 
      calHelper(calendar, day, 7, 0); 
      break; 
     case 2: 
      calHelper(calendar, day, 8, 0); 
      break; 
     case 3: 
      calHelper(calendar, day, 8, 55); 
      break; 
     case 4: 
      calHelper(calendar, day, 9, 50); 
      break; 
     case 5: 
      calHelper(calendar, day, 10, 55); 
      break; 
     case 6: 
      calHelper(calendar, day, 11, 50); 
      break; 
     case 7: 
      calHelper(calendar, day, 12, 45); 
      break; 
     case 8: 
      calHelper(calendar, day, 13, 40); 
      break; 
     case 9: 
      calHelper(calendar, day, 14, 25); 
      break; 
     case 10: 
      calHelper(calendar, day, 15, 15); 
      break; 
    } 
    return calendar; 
} 

private void calHelper(Calendar calendar, int day, int hour, int minute) { 
    long currTime = calendar.getTimeInMillis(); 
    calendar.set(Calendar.DAY_OF_WEEK, day); 
    calendar.set(Calendar.HOUR_OF_DAY, hour); 
    calendar.set(Calendar.MINUTE, minute); 
    calendar.set(Calendar.SECOND, 0); 
    long getTime = calendar.getTimeInMillis(); 
    if (getTime < currTime) 
     calendar.setTimeInMillis(getTime + 604800000); 
} 

通知(notifyUser())を送る機能を取得することになっています毎日/時/分を指定するカレンダーのセットと、その時に毎週放送受信機を起動するアラームを設定します。私は古いプロジェクトでまったく同じコードを使用していましたが、現在は機能していません。私の古いプロジェクトと新しいものとの間の主な変更点は、新しいものがデータを格納するためにデータベース(sqlite3)を使用していたのに対し、古いものはファイルを使用していましたが、これはブロードキャスト受信機がここで何が起きているのかがわかります。マニフェストで

私はこの

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

すべてのヘルプは理解されるであろうしました!

+0

きれいにして再構築しましたか? – Ryan

+0

私は今やったがそれでも動作しません –

答えて

0

あなたがマニフェスト

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

に述べるならばMyBroadcastReceiverは、コードのルートではなく、サブパッケージでなければなりません。それはルートパッケージに入っていますか?この方法は、あなたが後に放送の意図を送信逃しsendBroadcast(intent);

+0

それは他のすべてのJavaファイルと同じディレクトリにあります。 –

0

あなたは(notifyUserで意図起動していない:あなたは一例FORE、確かにあなたのマニフェストにパッケージ全体の名前を入力したいかもしれません意図を定義する。目的を定義した後に次の行を追加してください。

sendBroadcast(intent); 
+0

この行はどこに追加しますか? –

+0

私の悪い、この行を変更しようとする 'AlarmManager alarmManager =(AlarmManager)getSystemService(ALARM_SERVICE); 'to'アラームマネージャalarmManager =(AlarmManager)getSystemService(Context.ALARM_SERVICE); ' – madroid

+0

まだ動作しません。興味深いことにsendBroadcastは実際に送信しますが、BroadcastReceiverが動作していることを知っています –

0

を使用)

<receiver android:name="org.myapp.receivers.MyBroadcastReceiver" /> 
0

以下のインテントフィルターをマニフェストに登録してください。

<action android:name="android.intent.action.BOOT_COMPLETED"/> 
関連する問題