我有一个按钮,当它点击它会触发doStartAlarm(View v),这个方法会触发一个静态方法startAlarmNow,当我点击按钮它会启动闹钟然后应用程序停止,这是logCat的一部分:
致命的例外:主要
java.lang.IllegalStateException:无法执行活动的方法
引起:android.util.AndroidRuntimeException:从Activity上下文外部调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗?
我希望onClick方法doStartAlarm调用静态方法startAlarmNow,所以我可以在实现BroadcastReceiver的类中使用这个静态方法,
这是我的代码。
public class MainActivity extends Activity {
static Ringtone ringtone = null;
static AudioManager audioManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
}
public static void startAlarmNow(Context context) {
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);
}
}
if (ringtone != null) {
Toast.makeText(context, "ringtone is already playing",
Toast.LENGTH_LONG).show();
} else {
ringtone = RingtoneManager.getRingtone(context, alert);
ringtone.setStreamType(AudioManager.STREAM_ALARM);
int volume = audioManager
.getStreamVolume(AudioManager.STREAM_ALARM);
if (volume == 0) {
volume = audioManager
.getStreamMaxVolume(AudioManager.STREAM_ALARM);
}
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, volume,
AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
if (ringtone != null) {
ringtone.play();
Toast.makeText(context, "ringtone is playing",
Toast.LENGTH_LONG).show();
Intent i = new Intent(context, StopAlarmActivity.class);
context.startActivity(i);
}
}
}
public void doStartAlarm(View v) {
Context context = getApplicationContext();
startAlarmNow(context);
}
答案 0 :(得分:0)
而是使用getApplicationContext()
方法使用this
引用Activity
对象,它也是上下文:
startAlarm(this);