【问题标题】:How do I retrieve Intent Extras within a Service started by an AlarmManager schedule?如何在由 AlarmManager 计划启动的服务中检索 Intent Extras?
【发布时间】:2014-10-31 13:47:45
【问题描述】:
public void onCreate() {
    super.onCreate();
    int idFunc = getApplicationContext().getSharedPreferences(SPREF_NAME,Context.MODE_PRIVATE).getInt("idFunc", 0);
    String SecKey = getApplicationContext().getSharedPreferences(SPREF_NAME,Context.MODE_PRIVATE).getString("chave", null);
    Intent intent = new Intent(getApplicationContext(), ServiceEnviaClientes.class);
    Bundle bundle = new Bundle();
    bundle.putString("SecKey", SecKey);
    bundle.putInt("idFunc", idFunc);
    intent.putExtras(bundle);
    PendingIntent pintent = PendingIntent.getService(getApplicationContext(), 0, intent, 0);
    AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), 10*60000, pintent);
    initImageLoader(this);
}

我正在尝试从 AlarmManager Intent 传递 SharedPrefereces 提供的额外内容并在服务中检索它,而不是在服务运行时访问我的 SharedPreferences,因为我认为这需要更多内存。

 @Override
public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);
    Toast.makeText(this,"task perform in service",Toast.LENGTH_SHORT).show();
    Bundle bundle = intent.getExtras();
    mIdFunc = bundle.getInt("idFunc");
    mSecKey = bundle.getString("SecKey");
    ThreadJSONBuild td=new ThreadJSONBuild();
    td.start();
    Log.d(TAG, "onStartCommand cycle, idFunc: "+mIdFunc+" , SecKey: "+mSecKey);
    return super.onStartCommand(intent, flags, startId);
}

但我在mSecKey 上得到null 和在idFunc 上得到0。我不确定这是否是最佳选择,我会将 SharedPreferences 检索到 Service 的 onCreate() 方法中,但不确定。

【问题讨论】:

    标签: android android-intent android-service alarmmanager android-pendingintent


    【解决方案1】:

    当你打电话时

    PendingIntent pintent = PendingIntent.getService(getApplicationContext(), 0,
        intent, 0);
    

    您可能会取回一个现有的PendingIntent,其中没有您的附加功能。你应该使用

    PendingIntent pintent = PendingIntent.getService(getApplicationContext(), 0,
        intent, PendingIntent.FLAG_UPDATE_CURRENT);
    

    相反。这将确保您的额外内容放在Intent 中。但是请注意,此 PendingIntent 的所有用户都将替换额外内容。

    【讨论】:

    • 哦,太好了,我稍后再看看。现在有点忙,但看起来已经解决了。 (=
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多