Android服务在ICS(4.0)版本上运行,但在真实设备中不在果冻豆(4.1)上运行

时间:2013-08-14 06:04:42

标签: android service

我用4.3编译了我的应用程序,设置了min sdk 2.2并设置了目标sdk 4.3。当我在模拟器上运行它时,它可以正常工作,但是当我在真实设备上运行它时,它会在服务调用时崩溃。我无法理解,问题出在哪里?我试图调试它但仍然没有任何解决方案。有人可以帮我解决这个问题吗?我在下面给出的应用程序代码 Schedule.java ScheduleService.java

package com.si.autoprofiler.view;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import com.si.autoprofiler.R;

import com.si.autoprofiler.DataBase.DBAdapterProfile2;
import com.si.autoprofiler.DataBase.DBAdapterSchedule;
import com.si.autoprofiler.util.ProfileGetSet;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TimePicker;
import android.widget.Toast;

public class Schedule extends Activity {
Calendar calender = Calendar.getInstance();
Button getDate, getStartTime, getEndTime, setBtn, back;
EditText getDescription;
Spinner profileSpin;

DBAdapterSchedule db;
DBAdapterProfile2 dbpro;

List<ProfileGetSet> scheduleList;
ArrayList<String> scheduleProfilelist;
ArrayAdapter<String> scheduleProfileAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    // this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.schedule);

    db = new DBAdapterSchedule(Schedule.this);

    dbpro = new DBAdapterProfile2(Schedule.this);

    getDate = (Button) findViewById(R.id.setdate);
    getStartTime = (Button) findViewById(R.id.starttime);
    getEndTime = (Button) findViewById(R.id.endtime);
    setBtn = (Button) findViewById(R.id.save);
    back = (Button) findViewById(R.id.backBtn);

    scheduleProfilelist = new ArrayList<String>();
    createDynamicSpinner1();

    getDate.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            new DatePickerDialog(Schedule.this, d, calender
                    .get(Calendar.YEAR),          calender.get(Calendar.MONTH),
                    calender.get(Calendar.DAY_OF_MONTH)).show();
        }
    });

    getStartTime.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            new TimePickerDialog(Schedule.this, t1, calender
                    .get(Calendar.HOUR_OF_DAY), calender
                    .get(Calendar.MINUTE), false).show();
        }
    });

    getEndTime.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            new TimePickerDialog(Schedule.this, t2, calender
                    .get(Calendar.HOUR_OF_DAY), calender
                    .get(Calendar.MINUTE), false).show();
        }
    });

    setBtn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            String setDate = getDate.getText().toString();
            String startTime = getStartTime.getText().toString();
            String endTime = getEndTime.getText().toString();
            String selectedprofile = profileSpin.getSelectedItem()
                    .toString();

            db.open();
            Cursor c1 = db.getallSchedule();
            if (c1 != null) {
                c1.moveToFirst();
                db.deleteAllSchedule();
                db.insertSchedule(setDate, startTime, endTime,
                        selectedprofile);
                Toast.makeText(getApplicationContext(), "Schedule is set.",
                        Toast.LENGTH_SHORT).show();
            } else if (c1 == null) {
                db.insertSchedule(setDate, startTime, endTime,
                        selectedprofile);
                Toast.makeText(getApplicationContext(), "Schedule is set.",
                        Toast.LENGTH_SHORT).show();
            }
            c1.close();
            db.close();
            Intent in = new Intent(Schedule.this, ScheduleService.class);
            startService(in);
        }
    });

}

private void createDynamicSpinner1() {

    profileSpin = (Spinner) findViewById(R.id.profileSpinner1);
    dbpro.open();
    scheduleList = dbpro.getAllList();

    for (ProfileGetSet p : scheduleList) {
        String log1 = p.getProfilename();

        scheduleProfilelist.add(log1);

    }

    scheduleProfileAdapter = new ArrayAdapter<String>(
            getApplicationContext(),
            R.layout.spinner_text,
            scheduleProfilelist);
    profileSpin.setAdapter(scheduleProfileAdapter);
    dbpro.close();
}

/* ...................Date time picker dialog code here............ */

TimePickerDialog.OnTimeSetListener t1 = new TimePickerDialog.OnTimeSetListener() {

    @SuppressLint("SimpleDateFormat")
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // TODO Auto-generated method stub
        calender.set(Calendar.HOUR_OF_DAY, hourOfDay);
        calender.set(Calendar.MINUTE, minute);

        SimpleDateFormat timeformate = new SimpleDateFormat("hh:mm:ss aa");
        String s1 = timeformate.format(calender.getTime());

        getStartTime.setText(s1);

    }
};

TimePickerDialog.OnTimeSetListener t2 = new TimePickerDialog.OnTimeSetListener() {

    @SuppressLint("SimpleDateFormat")
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // TODO Auto-generated method stub
        calender.set(Calendar.HOUR_OF_DAY, hourOfDay);
        calender.set(Calendar.MINUTE, minute);

        SimpleDateFormat timeformate = new SimpleDateFormat("hh:mm:ss aa");
        String s2 = timeformate.format(calender.getTime());
        getEndTime.setText(s2);
    }
};

DatePickerDialog.OnDateSetListener d = new OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        // TODO Auto-generated method stub
        calender.set(Calendar.YEAR, year);
        calender.set(Calendar.MONTH, monthOfYear);
        calender.set(Calendar.DAY_OF_MONTH, dayOfMonth);

        java.text.DateFormat datef = java.text.DateFormat.getDateInstance();
        String d1 = datef.format(calender.getTime());
        getDate.setText(d1);

    }
};

public void backbtn(View Button) {

    finish();
}
}

下面给出的服务类代码:

package com.si.autoprofiler.view;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import java.util.Timer;
import java.util.TimerTask;

import com.si.autoprofiler.R;

import com.si.autoprofiler.DataBase.DBAdapterProfile2;
import com.si.autoprofiler.DataBase.DBAdapterSchedule;

import android.annotation.SuppressLint;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
import android.os.Vibrator;
import android.provider.MediaStore.Audio;
import android.text.format.Time;
import android.widget.Toast;

@SuppressLint("HandlerLeak")
public class ScheduleService extends Service {
private static Timer timer1 = new Timer();
DBAdapterSchedule db = new DBAdapterSchedule(ScheduleService.this);
Vibrator vib = null;
Boolean bool = false;

DBAdapterProfile2 DBProfile = new DBAdapterProfile2(ScheduleService.this);
AudioManager am = null;

Time timeNow = new Time();

Date d2, d3, d1;

String da, start, end, profile, vibrate;
int ringValue, alarmValue, notiValue, sysValue, voiceValue;
String convertedTime, endTime, convertedEndTime;
String dissmis = "Dissmis";

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();

    vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
}

@SuppressWarnings("deprecation")
@Override
public void onStart(Intent intent, int startId) {
    // TODO Auto-generated method stub
    super.onStart(intent, startId);

    db.open();
    Cursor c1 = db.getallSchedule();
    if (c1 != null) {
        c1.moveToFirst();
        da = c1.getString(0);
        start = c1.getString(1);
        end = c1.getString(2);
        profile = c1.getString(3);
    }
    c1.close();
    db.close();

    timer1.scheduleAtFixedRate(new MainTask(), 0, 1000);

}

private class MainTask extends TimerTask {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        toastHandler.sendEmptyMessage(0);
    }

}

private final Handler toastHandler = new Handler() {
    @SuppressWarnings("deprecation")
    @SuppressLint({ "HandlerLeak", "HandlerLeak", "HandlerLeak",
            "HandlerLeak", "HandlerLeak", "SimpleDateFormat" })
    public void handleMessage(android.os.Message msg) {
        Calendar cal = Calendar.getInstance(TimeZone
                .getTimeZone("GMT+1:00"));
        Date currentLocalTime = cal.getTime();
        DateFormat date = new SimpleDateFormat("hh:mm:ss a");
        // DateFormat date2 = new SimpleDateFormat("hh:mm:ss a");
        // endTime = date2.format(currentLocalTime);

        convertedTime = date.format(currentLocalTime);

        DateFormat s = new SimpleDateFormat("MMMM d, yyyy");
        String d = s.format(currentLocalTime);

        try {
            d2 = s.parse(da);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {
            d3 = s.parse(d);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        int dateValue = d2.compareTo(d3);

        if (dateValue < 1) {

            if (start.equals(convertedTime)) {
                Toast.makeText(getApplicationContext(), "Inside if",
                        Toast.LENGTH_SHORT).show();
                DBProfile.open();
                Cursor c2 = DBProfile.getProfile(profile);
                if (c2 != null) {

                    ringValue = Integer.parseInt(c2.getString(1));
                    alarmValue = Integer.parseInt(c2.getString(2));
                    notiValue = Integer.parseInt(c2.getString(3));
                    sysValue = Integer.parseInt(c2.getString(4));
                    voiceValue = Integer.parseInt(c2.getString(5));
                    vibrate = c2.getString(6);
                }
                c2.close();
                DBProfile.close();

                bool = Boolean.valueOf(vibrate);

                if (bool) {

                    if (ringValue == 0 && alarmValue == 0 && notiValue == 0
                            && sysValue == 0 && voiceValue == 0) {

                        am.setStreamVolume(AudioManager.STREAM_RING,
                                ringValue, 0);
                        am.setStreamVolume(AudioManager.STREAM_ALARM,
                                alarmValue, 0);
                        am.setStreamVolume(
                                AudioManager.STREAM_NOTIFICATION,
                                notiValue, 0);
                        am.setStreamVolume(AudioManager.STREAM_SYSTEM,
                                sysValue, 0);
                        am.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
                                voiceValue, 0);
                        am.setVibrateSetting(
                                AudioManager.VIBRATE_TYPE_RINGER,
                                AudioManager.VIBRATE_SETTING_ON);
                        am.setVibrateSetting(
                                AudioManager.VIBRATE_TYPE_NOTIFICATION,
                                AudioManager.VIBRATE_SETTING_ON);

                    } else {

                        am.setStreamVolume(AudioManager.STREAM_RING,
                                ringValue, 0);
                        am.setStreamVolume(AudioManager.STREAM_ALARM,
                                alarmValue, 0);
                        am.setStreamVolume(
                                AudioManager.STREAM_NOTIFICATION,
                                notiValue, 0);
                        am.setStreamVolume(AudioManager.STREAM_SYSTEM,
                                sysValue, 0);
                        am.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
                                voiceValue, 0);
                        am.setVibrateSetting(
                                AudioManager.VIBRATE_TYPE_RINGER,
                                AudioManager.VIBRATE_SETTING_ON);
                        am.setVibrateSetting(
                                AudioManager.VIBRATE_TYPE_NOTIFICATION,
                                AudioManager.VIBRATE_SETTING_ON);
                    }
                } else {

                    am.setStreamVolume(AudioManager.STREAM_RING, ringValue,
                            0);
                    am.setStreamVolume(AudioManager.STREAM_ALARM,
                            alarmValue, 0);
                    am.setStreamVolume(AudioManager.STREAM_NOTIFICATION,
                            notiValue, 0);
                    am.setStreamVolume(AudioManager.STREAM_SYSTEM,
                            sysValue, 0);
                    am.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
                            voiceValue, 0);
                    am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_OFF);
                    am.setVibrateSetting(
                            AudioManager.VIBRATE_TYPE_NOTIFICATION,
                            AudioManager.VIBRATE_SETTING_OFF);

                }

            }
        }

        if (end.equals(convertedTime)) {

            timer1.cancel();

            onDestroy();

        }

    };

};

@SuppressWarnings("deprecation")
@Override
public void onDestroy() {
    am.setStreamVolume(AudioManager.STREAM_RING, 7, 0);
    am.setStreamVolume(AudioManager.STREAM_ALARM, 7, 0);
    am.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 7, 0);
    am.setStreamVolume(AudioManager.STREAM_SYSTEM, 7, 0);
    am.setStreamVolume(AudioManager.STREAM_VOICE_CALL, 5, 0);
    am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
            AudioManager.VIBRATE_SETTING_ON);
    am.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,
            AudioManager.VIBRATE_SETTING_ON);
    super.onDestroy();

}
}

0 个答案:

没有答案