2016-08-04 4 views
0

알람 앱을 만들면 선택한 사운드가 재생되고 알람이 설정된 시간을 알려주는 알람 앱이 생성됩니다.알람 앱이 제대로 작동하지 않음

필자는 결코 사운드를 얻지 못한다. 여기에 내가 누락 되었습니까?

편집 : AlarmReceiver

public class AlarmReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 

    String state = intent.getExtras().getString("extra"); 
    Log.e("MyActivity", "In the receiver with " + state); 

    String richard_id = intent.getExtras().getString("quote id"); 
    Log.e("Goat quote is" , richard_id); 

    Intent serviceIntent = new Intent(context,RingtonePlayingService.class); 
    serviceIntent.putExtra("extra", state); 
    serviceIntent.putExtra("quote id", richard_id); 

    context.startService(serviceIntent); 
} 

}

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener{ 
AlarmManager alarmManager; 
private PendingIntent pending_intent; 

private TimePicker alarmTimePicker; 
private static MainActivity inst; 
private TextView alarmTextView; 

private AlarmReceiver alarm; 
private Context context; 
Spinner spinner; 
int richard_quote = 0; 


@TargetApi(Build.VERSION_CODES.M) 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // alarmTimePicker = (TimePicker) findViewById(R.id.alarmTimePicker); 
    // alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    this.context = this; 

    //alarm = new AlarmReceiver(); 
    alarmTextView = (TextView) findViewById(R.id.alarmText); 

    final Intent myIntent = new Intent(this.context, AlarmReceiver.class); 

    // Get the alarm manager service 
    alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

    // set the alarm to the time that you picked 
    final Calendar calendar = Calendar.getInstance(); 
    //calendar.add(Calendar.SECOND, 3); 
    alarmTimePicker = (TimePicker) findViewById(R.id.alarmTimePicker); 

    //spinner creation 
    Spinner spinner = (Spinner) findViewById(R.id.richard_spinner); 
    // Create an ArrayAdapter using the string array and a default spinner layout 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
      R.array.dawkins_sounds, android.R.layout.simple_spinner_item); 
    // Specify the layout to use when the list of choices appears 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    // Apply the adapter to the spinner 
    spinner.setAdapter(adapter); 

    // Spinner click listener 
    spinner.setOnItemSelectedListener(this); 

    myIntent.putExtra("extra", "yes"); 
    myIntent.putExtra("quote id", String.valueOf(richard_quote)); 
    pending_intent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 






    Button start_alarm= (Button) findViewById(R.id.start_alarm); 
    start_alarm.setOnClickListener(new View.OnClickListener() { 
     @TargetApi(Build.VERSION_CODES.M) 

     @Override 
     public void onClick(View v) { 

      calendar.set(Calendar.HOUR, alarmTimePicker.getHour()); 
      calendar.set(Calendar.MINUTE, alarmTimePicker.getMinute()); 
      calendar.set(Calendar.SECOND, 0); 
     // calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getHour()); 
     // calendar.set(Calendar.MINUTE, alarmTimePicker.getMinute()); 

      final int hour = alarmTimePicker.getHour(); 
      final int minute = alarmTimePicker.getMinute();; 

      String minute_string = String.valueOf(minute); 
      String hour_string = String.valueOf(hour); 

      if (minute < 10) { 
       minute_string = "0" + String.valueOf(minute); 
      } 

      if (hour > 12) { 
       hour_string = String.valueOf(hour - 12) ; 
      } 


      // myIntent.putExtra("extra", "yes"); 
      // myIntent.putExtra("quote id", String.valueOf(richard_quote)); 
     // pending_intent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 


      // alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pending_intent); 
      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pending_intent); 

     // setAlarmText("Alarm ON "); 

      setAlarmText("Alarm set to " + hour_string + ":" + minute_string); 
     } 

    }); 

    Button stop_alarm= (Button) findViewById(R.id.stop_alarm); 
    stop_alarm.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      myIntent.putExtra("extra", "no"); 
      myIntent.putExtra("quote id", String.valueOf(richard_quote)); 
      sendBroadcast(myIntent); 

      alarmManager.cancel(pending_intent); 
      setAlarmText("Alarm canceled"); 

      //setAlarmText("ID is " + richard_quote); 
     } 
    }); 

} 

public void setAlarmText(String alarmText) { 
    alarmTextView.setText(alarmText); 
} 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 


@Override 
public void onStart() { 
    super.onStart(); 
    inst = this; 
} 


@Override 
public void onDestroy() { 
    super.onDestroy(); 

    Log.e("MyActivity", "on Destroy"); 
} 

@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

    //Toast.makeText(parent.getContext(), "Spinner item 3!" + id, Toast.LENGTH_SHORT).show(); 
    richard_quote = (int) id; 
} 

@Override 
public void onNothingSelected(AdapterView<?> parent) { 
    // Another interface callback 

} 

}

이것은 : 죄송합니다이 내가이는 MainActivity입니다

이 무엇이것은 RingtonrPlayingService

public class RingtonePlayingService extends Service { 

private boolean isRunning; 
private Context context; 
MediaPlayer mMediaPlayer; 
private int startId; 

@Override 
public IBinder onBind(Intent intent) 
{ 
    Log.e("MyActivity", "In the alarm service"); 
    return null; 
} 


@TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 


    final NotificationManager mNM = (NotificationManager) 
      getSystemService(NOTIFICATION_SERVICE); 

    Intent intent1 = new Intent(this.getApplicationContext(), MainActivity.class); 
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent1, 0); 

    Notification mNotify = new Notification.Builder(this) 
      .setContentTitle("alarm is talking" + "!") 
      .setContentText("Click me!") 
      .setSmallIcon(R.drawable.ic_action_call) 
      .setContentIntent(pIntent) 
      .setAutoCancel(true) 
      .build(); 

    String state = intent.getExtras().getString("extra"); 

    Log.e("what is going on here ", state); 

    assert state != null; 
    switch (state) { 
     case "no": 
      startId = 0; 
      break; 
     case "yes": 
      startId = 1; 
      break; 
     default: 
      startId = 0; 
      break; 
    } 

    // get richard's thing 
    String richard_id = intent.getExtras().getString("quote id"); 
    Log.e("Service: goatid is " , richard_id); 

    if(!this.isRunning && startId == 1) { 
     Log.e("if there was not sound ", " and you want start"); 

     assert richard_id != null; 
     if (richard_id.equals("0")) { 

      int min = 1; 
      int max = 2; 

      Random r = new Random(); 
      int random_number = r.nextInt(max - min + 1) + min; 
      Log.e("random number is ", String.valueOf(random_number)); 

      if (random_number == 1) { 
       mMediaPlayer = MediaPlayer.create(this, R.raw.alarm2); 
      } 
      else if (random_number == 2) { 
       mMediaPlayer = MediaPlayer.create(this, R.raw.alarm1); 
      } 

      else { 
       mMediaPlayer = MediaPlayer.create(this, R.raw.alarm2); 
      } 
     } 
     else if (richard_id.equals("1")) { 
      mMediaPlayer = MediaPlayer.create(this, R.raw.alarm2); 
     } 
     else if (richard_id.equals("2")) { 
      mMediaPlayer = MediaPlayer.create(this, R.raw.alarm1); 
     } 

     else { 
      mMediaPlayer = MediaPlayer.create(this, R.raw.alarm2; 
     } 


     mMediaPlayer.start(); 

     mNM.notify(0, mNotify); 

     this.isRunning = true; 
     this.startId = 0; 

    } 
    else if (!this.isRunning && startId == 0){ 
     Log.e("if there was not sound ", " and you want end"); 

     this.isRunning = false; 
     this.startId = 0; 

    } 

    else if (this.isRunning && startId == 1){ 
     Log.e("if there is sound ", " and you want start"); 

     this.isRunning = true; 
     this.startId = 0; 

    } 
    else { 
     Log.e("if there is sound ", " and you want end"); 

     mMediaPlayer.stop(); 
     mMediaPlayer.reset(); 

     this.isRunning = false; 
     this.startId = 0; 
    } 


    Log.e("MyActivity", "In the service"); 

    return START_NOT_STICKY; 
} 



@Override 
public void onDestroy() { 
    Log.e("JSLog", "on destroy called"); 
    super.onDestroy(); 

    this.isRunning = false; 
} 

}

+0

사용자가 연주 할 사운드 선택을 저장했음을 나타내는 코드가 표시되지 않습니다. 즉, 즉각적인 추측입니다. 당신은 당신의 알람 코드에 뭔가 잘못되었을 수 있습니다 -하지만 당신은 전혀 게시하지 않았습니다. – iheanyi

답변

0

올바르게 MediaPlayer를 시작하지 않을 것입니다. 이를 통해

읽기, 서비스와 MediaPlayer를 사용에 특히 섹션 :

  • 시작 재생 플레이어 준비 만들기

    https://developer.android.com/guide/topics/media/mediaplayer.html

    본질적으로, 단계

    1. 있는 선수

    2 단계를 건너 뛰고 2 단계에서 재생이 서비스에서 발생하는 경우 올바르게 작동하려면 약간의 작업이 필요합니다. 또한 MediaPlayer 리소스를 올바르게 관리하지 못합니다. 여기

    자세한 내용 : 특별히

    MediaPlayer를 개체 전에 먼저 준비 상태를 입력해야합니다 (바로 상태 다이어그램을지나, 그 페이지의 상단에있는)라고

    https://developer.android.com/reference/android/media/MediaPlayer.html

    재생을 시작할 수 있습니다.

  • 관련 문제