2013-04-02 2 views
2

Я пытаюсь внедрить службу на Android, которая каждые 1 минуту отображает тост-сообщение в Android. Я новичок в разработке Android и узнал о AlarmManager, который поможет мне в этом. Я реализовал код следующим образом:Android - сообщение Toast каждые 1 минута

Это мой IIManagerActivity класс

package com.example.iimanager; 

import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.SystemClock; 
import android.view.Menu; 
import android.widget.Toast; 

public class IIManagerActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_iimanager); 
     AlarmManager mgr=(AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     Intent i=new Intent(this, SampleService.class); 
     PendingIntent pi=PendingIntent.getService(this, 0, i, 0); 
     mgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), AlarmManager.INTERVAL_FIFTEEN_MINUTES/900, pi); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_iimanager, menu); 
     return true; 
    } 
} 

И это мой SampleService, который предназначен для отображения сообщения тостов. По какой-то причине я не могу увидеть сообщение с тостом независимо от того, как долго я жду.

package com.example.iimanager; 

import android.app.IntentService; 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.Toast; 

public class SampleService extends IntentService { 

    public SampleService() { 
     super("SimpleService"); 
     //Toast.makeText(getApplicationContext(), "this is my Toast message!!! =)", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     //do something 
     Toast.makeText(getApplicationContext(), "this is my Toast message!!! =)", Toast.LENGTH_LONG).show(); 
    } 
} 

Не могли бы вы рассказать мне, что случилось, и что нужно сделать, чтобы исправить это?

спасибо, что заранее.

+1

Просто интересно ... почему вы хотите это сделать? – Squonk

ответ

-2

Вы можете просто создать цикл, содержащий ваш код.

Как это:

public class Toaster extends Thread{      
    public void run(){    
    //Your code to loop 

    thread.sleep(60000)   
     } 
    } 

Надеется, что это помогает!

+0

'sleep (...)' это взломать. Есть лучшие способы сделать то, что хочет OP. – Squonk

0

Попробуйте создать объект Timer. Затем используйте scheduleAtFixedRate(TimerTask) для повторения сообщения Toast.

1

Скопировать ниже 3 линии для вызова тоста

Таймер = новый таймер();
TimerTask updateProfile = new SampleService (SampleService.this); timer.scheduleAtFixedRate (updateProfile, 10,1000);

class CustomTimerTask extends TimerTask { 
private Context context; 
private Handler mHandler = new Handler(); 
     // Write Custom Constructor to pass Context 
    public CustomTimerTask(Context con) { 
     this.context = con; 
    } 

    @Override 
    public void run() { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      mHandler.post(new Runnable() { 
      @Override 
      public void run() { 
Toast.makeText(getApplicationContext(), "this is my Toast message!!! =)", Toast.LENGTH_LONG).show();  
     } 
    }); 
} 
}).start(); 

} 

    } 
0

Попробуйте следующий код,

MainActivity.java

public class MyService extends Service { 

public static final long INTERVAL=60000;//variable for execute services every 1 minute 
private Handler mHandler=new Handler(); // run on another Thread to avoid crash 
private Timer mTimer=null; // timer handling 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    throw new UnsupportedOperationException("unsupported Operation"); 
} 
@Override 
public void onCreate() { 
    // cancel if service is already existed 
     if(mTimer!=null) 
      mTimer.cancel(); 
    else 
      mTimer=new Timer(); // recreate new timer 
    mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(),0,INTERVAL);// schedule task 
} 
@Override 
public void onDestroy() { 
    Toast.makeText(this, "In Destroy", Toast.LENGTH_SHORT).show();//display toast when method called 
    mTimer.cancel();//cancel the timer 
} 
//inner class of TimeDisplayTimerTask 
private class TimeDisplayTimerTask extends TimerTask { 
    @Override 
    public void run() { 
     // run on another thread 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 
       // display toast at every 1 minute 
       Toast.makeText(getApplicationContext(), "Notify", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
} 
} 

MainActivity.java

public class MainActivity extends AppCompatActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main);//load the layout file 
    startService(new Intent(this,MyService.class));//use to start the services 
} 
} 

Кроме того, добавьте этот код в файле манифеста

AndroidManifest.xml

<service android:name=".MyService" 
     android:enabled="true"/> 
+0

Что делать с этим кодом? Кода недостаточно. Расскажите, что вы изменили. Остановите его до важных частей. Благодарю. – kwoxer

+0

Используя этот код, вы можете реализовать сервис на Android, который каждые 10 минут отображает тост-сообщение в Android.Thanks, надеюсь, он вам пригодится. –

Смежные вопросы