【问题标题】:Android get information from serviceAndroid从服务中获取信息
【发布时间】:2016-01-15 07:07:52
【问题描述】:

我做了一个每 10 秒触发一次的服务。如何在触发时将服务连接到活动。示例我刷新我的本地数据库,当出现更新活动时发送 Toast。

AlarmService.class

    @SuppressLint("SimpleDateFormat")
public class AlarmService extends Service {

    Handler mHandler;
    private PendingIntent pendingIntent;

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

    @Override
    public void onCreate() {
    }

    public void f() {
        Toast t = Toast.makeText(this, "Service is still running",
                Toast.LENGTH_SHORT);
        t.show();
    }

    @Override
    @Deprecated
    public void onStart(Intent intent, int startId) {
        Toast t = Toast.makeText(this, "Service started", Toast.LENGTH_SHORT);
        t.show();

        // TODO Auto-generated method stub
        super.onStart(intent, startId);

        mHandler = new Handler();
        Runnable r = new Runnable() {
            @Override
            public void run() {
                f();
                mHandler.postDelayed(this,10000);
            }
        };
        mHandler.postDelayed(r, 10000);
    }
}

MainActivity.class

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       Intent serviceIntent = new Intent(this,AlarmService.class);
        startService(serviceIntent);

    }
}

【问题讨论】:

  • 你到底想达到什么目标?
  • 服务触发活动
  • 阅读bound Services,在大多数情况下,local bound service 模式是首选

标签: android android-service


【解决方案1】:

像这样使用广播接收器

public static class MyExtBroadcastReceiver extends BroadcastReceiver {

    public MyExtBroadcastReceiver() { 
         super();
    } 

    @Override
    public void onReceive(Context context, Intent intent) {
     //Call your activity here      
    }

制作设置闹钟的方法

 public void setAlarm(){
    f(); // call your method f() here 
    AlarmManager am=(AlarmManager)getSystemService(ALARM_SERVICE);
    Intent alarmintent1 = new Intent(this, MyExtBroadcastReceiver.class);
    PendingIntent sender1=PendingIntent.getBroadcast(this, 100, alarmintent1, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA);
    try {
        am.cancel(sender1);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println("ex....."+e);
    }

    Calendar cal=Calendar.getInstance();
    cal.add(Calendar.Seconds,10);
    am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000*10*60, sender1);

从 OnCreate() 调用此方法

@Override
public void onCreate() {
  setAlarm();

}
}

【讨论】:

    【解决方案2】:

    您可以使用LocalBroadcastManager、Messenger、ResultReceiver 将数据从服务发送到Activity。

    Here 是一个使用ResultReceiver 将更新数据从Service 发送到Activity 的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 2016-12-09
      • 1970-01-01
      相关资源
      最近更新 更多