请检查我的代码,我在某些安卓版本的服务中遇到异常 下面是我的错误代码,请告诉我如何解决这个问题 我添加的 计时器在服务中,并且我认为也从服务启动活动 有一些问题
下面的代码在安卓工作室的模拟器中运行流畅,但是当我在安卓手机和平板电脑上运行它时会出现问题。
java.lang.RuntimeException:
at android.app.ActivityThread.handleServiceArgs (ActivityThread.java:4145)
at android.app.ActivityThread.access$2400 (ActivityThread.java:229)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1924)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:148)
at android.app.ActivityThread.main (ActivityThread.java:7325)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)
Caused by: android.util.AndroidRuntimeException:
at android.app.ContextImpl.startActivity (ContextImpl.java:747)
at android.app.ContextImpl.startActivity (ContextImpl.java:734)
at android.content.ContextWrapper.startActivity (ContextWrapper.java:345)
at www.androidghost.com.batteryalarm.MyAlarmServiceClass.onStartCommand (MyAlarmServiceClass.java:136)
at android.app.ActivityThread.handleServiceArgs (ActivityThread.java:4128)
public class MyAlarmServiceClass extends Service
{
int ring_choice;
String ring_array[]={"ring_a","ring_b","ring_c","ring_d","ring_e","ring_f","ring_g","ring_h","ring_i","ring_j","ring_k","ring_l"};
Ringtone ringtone;
public SharedPreferences mSharedPreferencesAlert;
SharedPreferences getmSharedPreferences;
SharedPreferences MusicPref;
String path;
Vibrator vibrator;
Timer mTimer;
@Nullable
@Override
public IBinder onBind(Intent intent)
{
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
vibrator= (Vibrator) getSystemService(VIBRATOR_SERVICE);
try
{
mTimer = new Timer();
mTimer.scheduleAtFixedRate(new TimerTask() {
public void run() {
if (ringtone!=null) {
ringtone.play();
}
}
}, 5000*1, 5000*1);
vibrator.vibrate(3000);
}
catch (NullPointerException e)
{
e.printStackTrace();
}
mSharedPreferencesAlert=getSharedPreferences("ring", Context.MODE_PRIVATE);
ring_choice= mSharedPreferencesAlert.getInt("rings",3);
MusicPref= getSharedPreferences("Musics", Context.MODE_PRIVATE);
path=MusicPref.getString("Music",null);
//below shared prefrence is used to save value of checkbox which is in autofragment
getmSharedPreferences=getSharedPreferences("setring", Context.MODE_PRIVATE);
boolean checkV= getmSharedPreferences.getBoolean("setrings",true);
if(ringtone!=null)
{
ringtone.stop();
ringtone=null;
}
if(checkV)
{
try
{
AudioManager audioManager= (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_ALARM,100,0);
}
catch (NullPointerException e)
{
e.printStackTrace();
}
if (ring_choice==13)
{
if(path!=null)
{
Uri Customuri=Uri.parse(path);
ringtone = RingtoneManager.getRingtone(getApplicationContext(),Customuri);
ringtone.setStreamType(AudioManager.STREAM_ALARM);
ringtone.play();
}
}
else
{
Uri rawPath=Uri.parse("android.resource://"+getPackageName()+"/raw/"+ring_array[ring_choice-1]);
ringtone = RingtoneManager.getRingtone(getApplicationContext(),rawPath);
ringtone.setStreamType(AudioManager.STREAM_ALARM);
ringtone.play();
}
}
else
{
if (ring_choice==13)
{
if(path!=null)
{
Uri Customuri=Uri.parse(path);
ringtone = RingtoneManager.getRingtone(getApplicationContext(),Customuri);
ringtone.play();
}
}
else
{
Uri rawPath=Uri.parse("android.resource://"+getPackageName()+"/raw/"+ring_array[ring_choice-1]);
ringtone = RingtoneManager.getRingtone(getApplicationContext(),rawPath);
ringtone.play();
}
}
Intent stopDialog=new Intent(this, DialogActivity.class);
stopDialog.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
stopDialog.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(stopDialog);
return START_STICKY;
}
@Override
public void onDestroy()
{
if(ringtone!=null)
{
ringtone.stop();
ringtone=null;
}
try
{
vibrator.cancel();
}
catch (NullPointerException e)
{
e.printStackTrace();
}
super.onDestroy();
}
}
更新此代码:
Intent stopDialog=new Intent(this, DialogActivity.class(; stopDialog.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP(; stopDialog.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT(; startActivity(stopDialog(;
自:
Intent stopDialog=new Intent(this, DialogActivity.class);
stopDialog.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
stopDialog.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
stopDialog.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(stopDialog);