間隔

2012-02-02 23 views
2

你好,我是新來的Java和Android Alarmmanager顯示敬酒,我試圖用alarmmanager與天文臺按下startButton後顯示舉杯每10秒。 10秒後沒有任何事情發生,我不知道爲什麼。間隔

你可以看看我的代碼,幫助我發現和解決存在的問題?

謝謝。

變量 - journeycount =時計,的PendingIntent mAlarmSender

主類 - SafeDrive3Activity

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

      journeycount = (Chronometer) findViewById(R.id.journeycount); 
      // Watch for button clicks. 
      startButton = (Button) findViewById(R.id.startButton); 
      startButton.setOnClickListener(mStartListener); 

      resetButton = (Button) findViewById(R.id.resetButton); 
      resetButton.setOnClickListener(mResetListener); 

     } 

View.OnClickListener mStartListener = new OnClickListener() { 
    public void onClick(View v) { 

     int stoppedMilliseconds = 0; 

     String chronoText = journeycount.getText().toString(); 
     String array[] = chronoText.split(":"); 

     if (array.length == 2) { 
     stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 1000 
      + Integer.parseInt(array[1]) * 1000; 
     } else if (array.length == 3) { 
     stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 60 * 1000 
      + Integer.parseInt(array[1]) * 60 * 1000 
      + Integer.parseInt(array[2]) * 1000; 
     } 

     journeycount.setBase(SystemClock.elapsedRealtime() - stoppedMilliseconds); 
     journeycount.start(); 
     startButton.setText("Driving..."); // changes button text value to 'Driving...' 
     startButton.setOnClickListener(mStartListener); 

     Calendar cal = Calendar.getInstance(); 
     cal.setTimeInMillis(System.currentTimeMillis()); 
     // add 10 seconds to calendar object 
     cal.add(Calendar.SECOND, 10); 
     mAlarmSender = PendingIntent.getBroadcast(SafeDrive3Activity.this, 
       0, new Intent(SafeDrive3Activity.this, MyTimeReceiver.class), 0); 

     // Schedule the alarm! 
     AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); 
     am.set(AlarmManager.RTC_WAKEUP, 
         cal.getTimeInMillis(), mAlarmSender); 

    } 
    }; 

     View.OnClickListener mResetListener = new OnClickListener() { 
       public void onClick(View v) { 
        Button startButton; 
        startButton = (Button) findViewById(R.id.startButton); 
        startButton.setOnClickListener(mStartListener); 
        journeycount.setBase(SystemClock.elapsedRealtime()); 

        startButton.setText("Start Driving"); 
        journeycount.setText("00:00"); 
        journeycount.stop(); 

        AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); 
        am.cancel(mAlarmSender); 


       } 
     }; 


       };  

二等:

public class MyTimeReceiver extends BroadcastReceiver 

{ 
    @Override 
     public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "HOUR NOTIFICATION", Toast.LENGTH_LONG).show(); 

      } 
     } 

的Manifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.Safe" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="14" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:label="@string/app_name" 
     android:name=".SafeDrive3Activity" > 
     <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    <receiver android:name="MyTimeReceiver"></receiver> 
     </activity> 
    </application> 
</manifest> 
+0

仍然在努力獲得舉杯顯示,我認爲它只是一個小問題的代碼,任何想法:(? – Rob 2012-02-02 19:40:54

回答

1

我認爲你應該在這種情況下考慮一種不同的方法。爲什麼不使用只啓動Toast消息的Timer呢?

Timer timer = new Timer(); 
timer.schedule(new TimerTask() { 
    public void run() { 
     Toast.makeText(SafeDrive3Activity.this, "Whatever", Toast.LENGTH_LONG).show(); 
    } 
}, 0, 10000); 
+0

如何禁用服務類的onDestroy方法定時任務? – 2013-09-26 10:51:16

0

使用下面的代碼設定的報警經理

am.set(AlarmManager.RTC_WAKEUP, 
        SystemClock.elapsedRealtime(),mAlarmSender); 
+0

感謝答覆。我已經改成了上面的代碼,但仍沒有面包文本就要到了10秒。我得到的意圖時開始下面的錯誤在e模擬器,這與它有什麼關係? SafeDrive3] ActivityManager:警告:活動尚未開始,目前的任務已被帶到前面 – Rob 2012-02-02 15:54:55

+0

清理項目,然後再次運行 – 2012-02-02 16:06:05

+0

完成。我不認爲上述改變解決了這個問題。 沒有烤麪包的文字顯示在10秒鐘仍然:( – Rob 2012-02-02 16:19:01

0

嘗試使用下面的代碼:

AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
Intent serviceIntent = new Intent(context, MyService.class); 
PendingIntent pi = PendingIntent.getService(context, 0, serviceIntent, 0); 
alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 10000, pi); 

我沒有使用BroadcastReviver。我每10秒鐘就打一次服務。

新的解決方案:

AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
Intent serviceIntent = new Intent(context, MyActivity.class); 
PendingIntent pi = PendingIntent.getService(context, 0, serviceIntent, 0); 
alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 10000, pi); 

MyActivity:

public class MyActivity extends Activity { 
     @Override 
      public void onCreate(Bundle savedInstanceState) { 
      Toast.makeText(context, "HOUR NOTIFICATION", Toast.LENGTH_LONG).show(); 
      } 
} 
+0

這樣做走在主要活動課,哪裏的敬酒的代碼去 – Rob 2012-02-02 19:42:06

+0

我推出MyService.class每隔10秒,您可以定義自己的業務或活動,並設置它,當你宣佈你的PendingIntent:?意向書serviceIntent =新意圖(背景下,YourServiceOrActivity.class); 的PendingIntent PI = PendingIntent.getService(背景下,0,serviceIntent,0); – Alex 2012-02-03 15:35:53

+0

在您的服務或活動,您可以把代碼敬酒你應該創建一個服務或活動來代替。的廣播節目。 – Alex 2012-02-03 15:37:12