【问题标题】:How to start my service on boot but only with checkbox click如何在启动时启动我的服务,但只能通过单击复选框
【发布时间】:2013-11-22 23:03:53
【问题描述】:

我想要做的是,当你点击复选框时,它会启动一个通知图标,并在启动时重复。如果复选框关闭,它将终止通知并且不会在启动时重新启动。我有一半的工作。 (顺便说一句,我的复选框不在活动中,它在偏好类中)这是它的代码。

    CheckBoxPreference checkboxPref = (CheckBoxPreference)getPreferenceManager().findPreference("quickTweeterSaver");
    checkboxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {            
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        //preference.setDefaultValue(false);
        //preference.setChecked(true);

          CheckBoxPreference pref = (CheckBoxPreference) 
          findPreference("quickTweeterSaver"); 
          if(pref != null) { 
             pref.setChecked(false); 
           boolean myValue = (Boolean) newValue;
           if(myValue)
                startService(new Intent(UserSettingsActivity.this, NotifyService.class));
               //Toast.makeText(getBaseContext(), "Checked", Toast.LENGTH_SHORT).show();
                //quickTweetNotification();

           else
               stopService(new Intent(UserSettingsActivity.this, NotifyService.class));
               //Toast.makeText(getBaseContext(), "Unchecked", Toast.LENGTH_SHORT).show();
                quitQuickTweetNotification();
          return true;
     }
        return false;
 }; 
    });

如您所见,我有一个 if else 语句,第一部分有效,它启动服务并显示通知(但不会在启动时保持它),而在 else 部分,我必须手动调用一个方法退出通知图标,因为停止服务不起作用。

所以换句话说,我试图让它做的是...... -单击复选框时保持服务启动 - 取消选中复选框时在启动时销毁服务

这是我的通知服务类http://pastebin.com/zgRZpAsF

如果你能帮我解决这个问题,那就太好了。非常感谢各位!

*如果您需要任何其他信息、代码,请告诉我。我马上发帖!

【问题讨论】:

  • 您所说的“但不保持开机”是什么意思?是否意味着如果您启动应用程序,它会按照您的意愿运行,但是当您关闭手机并启动时,它的工作方式就不一样了?
  • 我的意思是,我想要它,所以当您单击复选框时,当您重新启动手机时通知图标仍会出现,您不必手动再次单击它即可打开。 @Mafro34
  • 你有一个BroadcastReciever来捕捉android.intent.action.BOOT_COMPLETED广播吗?
  • 是的,我在我的 NotifyService 类中添加了这个,但是当手机启动时它崩溃了 @Override public void onReceive(Context context, Intent arg1) { Toast.makeText(getBaseContext(), "on receive checkbox boot", Toast.LENGTH_SHORT).show(); //startService(new Intent(NotifyService.this, NotifyService.class)); } 这是我在下一条评论中的清单条目
  • <receiver android:name=".NotifyService" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <service android:name=".NotifyService" />

标签: android service checkbox notifications sharedpreferences


【解决方案1】:

取消选中复选框时在启动时销毁服务

如果您不想在启动时获得控制权,请使用 PackageManager 和 setComponentEnabledSetting() 禁用 ACTION_BOOT_COMPLETED BroadcastReceiver。

【讨论】:

  • 我还建议使用 AsyncTask 在后台进行此更改,因为这有时会有点慢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多