0

我正在开发一个android应用程序。我想每天提供五个通知。我将通知时间存储在sqlite数据库中。然后我使用服务将这个数据库通知时间与重复循环中的设备时间进行比较。但是通知不起作用正确。Forceclose出现了。我已经给出了下面的两个类文件第三,java和MyService.......我需要帮助

     Third.java

   public class third extends Activity {
/** Called when the activity is first created. */
Button btnopen;
Spinner spin1,spin2,spin3,spin4,spin5;
EditText t1,t2,t3,t4,t5;
String fajr,zuhr,asr,magrib,isha;
String[] item={"","2-Times Allahu akbar","3-Beep once"};
example r=new example();
private static final String DATABASE_NAME = "MYPRAYER.db";   
private static final String DATABASE_TABLE = "notification";
private static final String DATABASE_CREATE = "create table "+DATABASE_TABLE+"(id integer primary key autoincrement , fajr varchar not null , zuhr varchar not null , asr varchar not null , magrib varchar not null , isha varchar not null );"; 

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.page3);
   /* Call the service */
    Intent i = new Intent();
    i.setClassName( "org.prayer.test","org.prayer.test.MyService" );
    bindService( i, null, Context.BIND_AUTO_CREATE);
    this.startService(i); 
    /*  Populate the spinner */
btnopen=(Button)findViewById(R.id.button1);
t1=(EditText)findViewById(R.id.editText1);
t2=(EditText)findViewById(R.id.editText2);
t3=(EditText)findViewById(R.id.editText3);
t4=(EditText)findViewById(R.id.editText4);
t5=(EditText)findViewById(R.id.editText5);
spin1=(Spinner)findViewById(R.id.spinner1);
spin2=(Spinner)findViewById(R.id.spinner3);
spin3=(Spinner)findViewById(R.id.spinner4);
spin4=(Spinner)findViewById(R.id.spinner6);
spin5=(Spinner)findViewById(R.id.spinner7);
ArrayAdapter<String> a1=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,item);
a1.setDropDownViewResource(android.R.layout.simple_spinner_item);
spin1.setAdapter(a1);
spin2.setAdapter(a1);
spin3.setAdapter(a1);
spin4.setAdapter(a1);
spin5.setAdapter(a1);

         /* Notification time stored on the database */
try
{
        SQLiteDatabase myDB;
        //myDB = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
        myDB = SQLiteDatabase.openDatabase("/data/data/org.prayer.test/databases/MYPRAYER.db",null,SQLiteDatabase.CREATE_IF_NECESSARY);

        //myDB.execSQL(DATABASE_CREATE);
        myDB.execSQL(DATABASE_CREATE);
        myDB = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
        ContentValues newRow = new ContentValues();
        newRow.put("id", "1");
        newRow.put("fajr", "0:00 AM");
        newRow.put("zuhr", "0:00 AM");
        newRow.put("asr", "0:00 AM");
        newRow.put("magrib", "0:00 AM");
        newRow.put("isha", "0:00 AM");
        myDB.insert(DATABASE_TABLE, null, newRow);
        myDB.close();
}
catch(SQLiteException ex)
{
    //Do nothing
    //System.out.println(ex.getMessage());
}

btnopen.setOnClickListener(new OnClickListener() {
      @Override
    public void onClick(View v) {

         fajr=t1.getText().toString();
         zuhr=t2.getText().toString();
         asr=t3.getText().toString();
         magrib=t4.getText().toString();
         isha=t5.getText().toString();

        SQLiteDatabase myDB;
        myDB = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
        ContentValues newRow = new ContentValues();
        newRow.put("id", "1");
        newRow.put("fajr", fajr);
        newRow.put("zuhr", zuhr);
        newRow.put("asr", asr);
        newRow.put("magrib", magrib);
        newRow.put("isha", isha);
        myDB.update(DATABASE_TABLE, newRow,"id" + "=" + "1",null);
        Toast.makeText(getApplicationContext(), "row updated", Toast.LENGTH_SHORT).show();
        myDB.close();
  }

});

} }

MyService.java

ppublic class MyService extends Service {
              private static final String DATABASE_NAME = "MYPRAYER.db";   
              private static final String DATABASE_TABLE = "notification";
              String tag="TestService";
                String a="hello";
                String res1,res2,res3,res4,res5;
                int hour,minute;
                String day3,day4,minute1,hour1;
                MediaPlayer mMediaPlayer;
                   /* Service creation */
               @Override
               public void onCreate() {
             super.onCreate();
               Toast.makeText(this, "Service created...", Toast.LENGTH_LONG).show();      
               Log.i(tag, "Service created...");


                  /* Rereive notification times from the databse notificaion */
              SQLiteDatabase myDB;
            myDB = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
            String[] resultColumns = new String[] {"fajr","zuhr","asr","magrib","isha"};
            Cursor allRows = myDB.query(DATABASE_TABLE, resultColumns, null, null, null, null, null, null);

            Integer cindex = allRows.getColumnIndex("fajr");
            Integer cindex1 = allRows.getColumnIndex("zuhr");
            Integer cindex2 = allRows.getColumnIndex("asr");
            Integer cindex3 = allRows.getColumnIndex("magrib");
            Integer cindex4 = allRows.getColumnIndex("isha");
            allRows.moveToFirst();
            res1=allRows.getString(cindex);
            res2=allRows.getString(cindex1);
            res3=allRows.getString(cindex2);
            res4=allRows.getString(cindex3);
            res5=allRows.getString(cindex4);


            myDB.close();

            while(!Thread.currentThread().isInterrupted())
            {
            try 
            {

                Calendar cal = Calendar.getInstance(); // Rereive calender date
                hour = cal.get(Calendar.HOUR_OF_DAY); // Take hour from the calender
                minute = cal.get(Calendar.MINUTE);    // Take minute from the calender
                minute1=minute + "";  // Convert minute to dtring
                if(minute1.equals("1")) 
                {
                minute1="01";
                }
                else if(minute1.equals("2"))
                {
                minute1="02";
                }
                else if(minute1.equals("3"))
                {
                minute1="03";
                }
                else if(minute1.equals("4"))
                {
                minute1="04";
                }
                else if(minute1.equals("5"))
                {
                minute1="05";
                }
                else if(minute1.equals("6"))
                {
                minute1="06";
                }
                else if(minute1.equals("7"))
                {
                minute1="07";
                }
                else if(minute1.equals("8"))
                {
                minute1="08";
                }
                else if(minute1.equals("9"))
                {
                minute1="09";
                }
                     /* Converting to 12 hour format */
                if ( hour < 12 )
                {
                     hour=hour;
                     day3=hour + "" + ":" + minute1;
                     day4=day3 + " " + "AM"; // DAY4 Contains the system time
                }
                else
                {
                    hour=hour-12;
                    day3=hour + "" + ":" + minute1;
                    day4=day3 + " " + "PM";
                }



                if(day4.equals(res1))
              {
                     Notification("Notification Title","Notification Message");


              }



                 if(day4.equals(res2))
                  {
                         Notification("Notification Title","Notification Message");

                  }


                 if(day4.equals(res3))
                  {
                         Notification("Notification Title","Notification Message");

                  } 
                 if(day4.equals(res4))
                  {
                         Notification("Notification Title","Notification Message");

                  }
                 if(day4.equals(res5))
                  {
                         Notification("Notification Title","Notification Message");

                  }

               Thread.sleep(1000);
       } 
       catch (InterruptedException e)
       {
               Thread.currentThread().interrupt();
               //System.out.println("New 1 Exception here");

       }

       catch (Exception e)
      {
               //Thread.currentThread().interrupt();
           System.out.println("nEW Exception here");
      }          
       }

       }         
          @Override
          public void onStart(Intent intent, int startId) {      
          super.onStart(intent, startId);  
          Log.i(tag, "Service started...");
       }
         @Override
         public void onDestroy() {
         super.onDestroy();
         Toast.makeText(this, "Service destroyed...", Toast.LENGTH_LONG).show();
       }

         @Override
         public IBinder onBind(Intent intent) {
         return null;
        }

         private  void Notification(String notificationTitle, String notificationMessage)
       {
         NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
         Notification notification = new Notification(R.drawable.ic_launcher, "A New Message!", System.currentTimeMillis());

         Intent notificationIntent = new Intent(this,MyService.class);
         PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

         notification.setLatestEventInfo(MyService.this, notificationTitle, notificationMessage, pendingIntent);
         notificationManager.notify(10001, notification);
   //HELLO_ID++;
         Uri alert = RingtoneManager.getDefaultUri(
        RingtoneManager.TYPE_NOTIFICATION); 

        mMediaPlayer = new MediaPlayer();
      try
      {
      mMediaPlayer.setDataSource(this, alert);

      AudioManager audioManager = (AudioManager)getSystemService(
                                  Context.AUDIO_SERVICE);
      int volumen = audioManager.getStreamVolume(
                    AudioManager.STREAM_NOTIFICATION);

      if (volumen != 0) {
        mMediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
        mMediaPlayer.setLooping(true);
        mMediaPlayer.prepare();
        mMediaPlayer.start();
      }
      }
      catch(IOException e)
      {  
          System.out.println("Exception here");
          //System.out.println("Exception 1 here");
      }
      }
          }

LG猫:

07-27 16:24:52.591:E/global(363):不支持已弃用的线程方法。07-27 16:24:52.591: E/global(363): java.lang.UnsupportedOperationException 07-27 16:24:52.591: E/global(363): at java.lang.VMThread.stop(VMThread.java: 85) 07-27 16:24:52.591: E/global(363): 在 java.lang.Thread.stop(Thread.java:1379) 07-27 16:24:52.591: E/global(363): 在java.lang.Thread.stop(Thread.java:1344) 07-27 16:24:52.591: E/global(363): at org.prayer.test.splash$1.run(splash.java:71) 07- 27 16:24:53.002: D/dalvikvm(363): GC 在 108 毫秒内释放了 879 个对象/65552 个字节 07-27 16:25:00.542: I/TestService(363): 服务创建... 07-27 16:25 :20.752:I/dalvikvm(363):threadid = 7:对信号3做出反应07-27 16:25:20.803:I/dalvikvm(363):将堆栈跟踪写入'/data/anr/traces.txt'

4

1 回答 1

0

如果您的目标是在一天中的固定时间触发通知,请使用 AlarmManager 执行此操作,如下所示:

  1. 当应用程序第一次启动时,像现在一样保存那些 EditText 值等 - 然后设置 AlarmManager 以在最近的下一个通知时间唤醒您的服务。
  2. 在服务中,发布通知,设置下一个闹钟,然后 stopSelf()。

这个循环将继续。

至于强制关闭,请粘贴您的 logcat。你的代码不是很整洁,变量没有有意义的命名,所以很难说。

于 2012-07-23T19:16:54.993 回答