2012-08-25 6 views
0

시간 코드에 의해 설정된 알람에서 토스트 메시지를 발생시키는이 코드가 있습니다. 토스트 메시지와 별도로 알람을 시작/시작하고 싶습니다. 알람 그것과 함께 음색. 이 내 mainActivity이Android : 내 AlarmReciever에서 알람 소리 시작/시작 getRingtone()이 null을 반환합니다.

public void onReceive(Context context, Intent intent) { 

     long time = intent.getExtras().getLong("time"); 
     Toast.makeText(context, "Alarming at "+formatDate(time), 
       Toast.LENGTH_LONG).show(); 
     //Uri alerTone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     try { 
      Uri alert = getAlarmUri(); 
      Log.d("alarmCheck","Value of URI: "+alert.toString()); 
      Ringtone r = RingtoneManager.getRingtone(context, alert); 
      r.play() 

; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

    private Uri getAlarmUri() { 
     Uri alert = RingtoneManager 
       .getDefaultUri(RingtoneManager.TYPE_ALARM); 
     if (alert == null) { 
      alert = RingtoneManager 
        .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
      if (alert == null) { 
       alert = RingtoneManager 
         .getDefaultUri(RingtoneManager.TYPE_RINGTONE); 
      } 
     } 
     return alert; 
    } 

입니다 :

이 내 리시버에 내 코드는

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final TimePicker timepicker = (TimePicker) findViewById(R.id.alarm_time); 
    Button set_alarm = (Button) findViewById(R.id.set_alarm); 

     set_alarm.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       Calendar c = Calendar.getInstance(); 
       c.setTimeInMillis(System.currentTimeMillis()); 
       c.set(Calendar.HOUR_OF_DAY, timepicker.getCurrentHour()); 
       c.set(Calendar.MINUTE, timepicker.getCurrentMinute()); 
       c.set(Calendar.SECOND, 0); 
       Intent in = new Intent(MainActivity.this, OnAlarmReciever.class); 
         in.putExtra("time", c.getTimeInMillis()); 
       PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 123456789, in, 0); 
       AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
       am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),pi); 
      } 
     }); 

    } 

내 수신기 부분에 곳의 try catch 블록, getRingtone ()는 null을 반환하므로 play()에 액세스하면 불투명 함이 생성됩니다.이 문제에 대한 모든 입력은 많은 도움이됩니다.

감사합니다. 신의 축복!

(DDMS 로그 캣, URI 값)


08-26 08:46:55.764: D/alarmCheck(537): Value of URI: content://settings/system/alarm_alert 
08-26 08:46:55.774: D/MediaPlayer(537): Couldn't open file on client side, trying server side 
08-26 08:46:55.825: E/MediaPlayer(537): Unable to to create media player 
08-26 08:46:55.825: E/RingtoneManager(537): Failed to open ringtone content://settings/system/alarm_alert 
08-26 08:46:55.825: W/System.err(537): java.lang.NullPointerException 
08-26 08:46:55.844: W/System.err(537): at com.example.alarmexercise.OnAlarmReciever.onReceive(OnAlarmReciever.java:36) 
08-26 08:46:55.844: W/System.err(537): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2119) 
08-26 08:46:55.844: W/System.err(537): at android.app.ActivityThread.access$1500(ActivityThread.java:123) 
08-26 08:46:55.844: W/System.err(537): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1197) 
08-26 08:46:55.844: W/System.err(537): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-26 08:46:55.844: W/System.err(537): at android.os.Looper.loop(Looper.java:137) 
08-26 08:46:55.854: W/System.err(537): at android.app.ActivityThread.main(ActivityThread.java:4424) 
08-26 08:46:55.854: W/System.err(537): at java.lang.reflect.Method.invokeNative(Native Method) 
08-26 08:46:55.854: W/System.err(537): at java.lang.reflect.Method.invoke(Method.java:511) 
08-26 08:46:55.854: W/System.err(537): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
08-26 08:46:55.864: W/System.err(537): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
08-26 08:46:55.874: W/System.err(537): at dalvik.system.NativeStart.main(Native Method) 

** 추가 수정이 .. 벨소리 R = ... R 실제로 널 **

인 라인 가능 EDIT인가 이 기본 음색/사운드는 에뮬레이터에서 작동하지 않습니까? 에뮬레이터에 기본 사운드가 없거나 톤/사운드를 처리 할 수 ​​없다는 사실 때문에 작동하지 않는 에뮬레이터에서 톤을 재생하는 것과 관련하여 몇 가지 스레드를 읽었 기 때문에 ..... ..... 아직이를 확인할 수 없습니다. 말하는 스레드가 거의 없습니다

+0

getAlarmUri()는 무엇을 반환합니까? – chiuki

+0

@chiuki 내 편집을 참조하십시오. tnx – lemoncodes

답변

0

실제로 에뮬레이터 문제 일 수 있습니다. mp3 파일을 sdcard로 밀어 넣고 벨소리로 설정하여 도움이되는지 확인하십시오.

+0

예, 시도했는데 SD 카드에 mp3를 가져 오면 정상적으로 작동하지만 에뮬레이터 장치의 기본 음은 작동하지 않습니다 – lemoncodes

+0

: mp3 카드의 파일에 기본 벨소리를 설정 한 다음 getDefaultUri , r.play()가 작동합니다, 네? – chiuki

+0

이런 식으로갑니다. – lemoncodes