【问题标题】:Fragment doesn't start Service片段不启动服务
【发布时间】:2014-09-16 08:58:01
【问题描述】:

我正在使用 ViewPager 编写应用程序,并且为此使用 Fragments。一切正常(就像我想要的那样)。

我在 ViewPager 中的一个片段有一个启动服务的按钮。

getActivity().startService(new Intent(getActivity(),Service.class)) 是来自 Button 的代码。

现在,当我单击按钮时,什么也没有发生。有没有另一种解决方案?

如果您需要更多信息和代码,请告诉我。

感谢您的帮助。

【问题讨论】:

  • 您的manifest.xml注册服务了吗?
  • 你在AndroidManifest.xml注册服务吗?
  • 另外,您是否为您的Button 设置了适当的侦听器?
  • 嗯,是的,我有。但现在我明白了我的错。我在 1 周前重命名了它。而且我没有在manifest.xml 中更改它.....谢谢你的“动力”
  • 也使用应用程序上下文来启动一个服务,该服务可能会比活动的上下文寿命长:developer.android.com/reference/android/content/…

标签: android android-activity android-fragments service fragment


【解决方案1】:

1) 在清单声明服务中:

<service android:name=".GameService" />

2) NEXT WRITE CLASS WITCH EXTENDS SERVICE:(在我的示例中是 Intent Serivce)

public class GameService extends IntentService
{
public GameService()
    {
        super("GameService");
    }

   @Override
    protected void onHandleIntent(Intent intent)
    {
       ..do some background work...
     }
}

3) 我的带有广播接收器的片段和带有呼叫服务的代码:

public class Stats_Fragment extends Fragment
{
 BroadcastReceiver receiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            Bundle extras = intent.getExtras();

            if(extras!=null)
            {
               //for example: extras.getString("value");
             }
        }
     }



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
   {
        View rootView = inflater.inflate(R.layout.fragment_stats, container, false);

        //CALLING SERIVCE (I call it here but you can call somewhere else...

         Intent intent = new Intent(getActivity(), GameService.class);
         intent.putExtra("Intent_Action", 3);
         intent.putExtra("playerID", MainClass.loggedUserID);
         getActivity().startService(intent);
    } 

    @Override
    public void onResume() {
        super.onResume();
        getActivity().registerReceiver(receiver, new IntentFilter(GameService.NOTIFICATION));
        CallStatsService();
    }

    @Override
    public void onPause()
    {
        super.onPause();
        getActivity().unregisterReceiver(receiver);
    }

 }

希望对你有帮助:)

【讨论】:

    【解决方案2】:

    这几乎总是与未将服务注册到清单中有关。一直发生在我身上。就放 &lt;service android:name="your.package.name.YourService"/> 进入你的清单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      相关资源
      最近更新 更多