タイムピッカーによって設定されたアラームでトーストメッセージを起動するこのコードがあります。トーストメッセージとは別に、アラーム音も一緒に起動/開始したいと思います。
これは私の受信者の私のコードです:
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;
}
これは私のmainActivityです:
@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()にアクセスするとnullexceptionが生成されます。この問題に関する入力は大歓迎です。
ありがとう、神のご加護を!
編集(DDMS Logcat、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が実際にnullである行**
このデフォルトのトーン/サウンドがエミュレータで機能しない可能性はありますか?エミュレータにデフォルトのサウンドがないか、トーン/サウンドを処理できないために動作しないエミュレータでのトーンの再生に関するスレッドをいくつか読んだので?.....これはまだ確認できません。そう言っているスレッドはほとんどありません