为什么我的服务没有开始?

时间:2013-04-04 18:41:47

标签: android android-service

我使用AlarmManager启动服务,但由于某种原因,我无法弄清楚服务是否无法启动。

我的onResume()中用于启动服务的代码是:

Intent appIntent = new Intent(cxt, NotificationService.class);

            AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
            PendingIntent penIntent = PendingIntent.getService(this, 0,
                    appIntent, PendingIntent.FLAG_UPDATE_CURRENT);

            alarmManager.cancel(penIntent);

            penIntent = PendingIntent.getService(this, 0, appIntent, PendingIntent.FLAG_UPDATE_CURRENT);

            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.HOUR_OF_DAY, 5);
            cal.set(Calendar.MINUTE, 00);
            cal.set(Calendar.SECOND, 00);

            alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, cal.getTimeInMillis(),
                    10 * 1000, penIntent);

Manifest包含以下内容:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

<application
     android:debuggable="true"
     android:icon="@drawable/icon"
     android:label="@string/app_name" >
      <service
          android:name="de.brillow.mensa.Speiseplan$NotificationService"
          android:enabled="true" />

最后服务本身看起来像这样:

public class NotificationService extends Service {

        private WakeLock mWakeLock;

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

        private void handleIntent(Intent intent) {
            // obtain the wake lock
            PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
            mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                    "wakelocktag");
            mWakeLock.acquire();

            Log.i("PowerManager", "acquired");

            // do the actual work, in a separate thread
            new PollTask().execute();
        }

        private class PollTask extends AsyncTask<Void, Void, Void> {

            @Override
            protected Void doInBackground(Void... params) {
                // do stuff!
                Log.i("Background", "stuff");
                return null;
            }


            @Override
            protected void onPostExecute(Void result) {
                // handle your data
                int id = 001;
                Log.i("Noti", "fication");
                NotificationManager mNotifyMng = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                        Speiseplan.this).setSmallIcon(R.drawable.icon)
                        .setContentTitle("Test").setContentText("Test!");

                mNotifyMng.notify(id, mBuilder.build());
                Log.i("Notification", "sent");
                stopSelf();
                Log.i("Service", "stopped");
            }
        }


        @Override
        public void onStart(Intent intent, int startId) {
            handleIntent(intent);
        }


        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            handleIntent(intent);
            return START_NOT_STICKY;
        }


        public void onDestroy() {
            super.onDestroy();
            mWakeLock.release();
        }
    }

由于某种原因,通知和Log.i消息都没有出现。我希望你能提供帮助。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您不应在AsyncTask内使用ServiceAsyncTask只应用于将结果返回到当前活动的任务,即应在ActivityFragment中定义。doInBackground(...)。这就是它的设计目标。

在您的情况下,您可以将onPostExecute(...)onCreate(...)中的所有内容放入服务的Activity。如果需要,请使用线程。如果您需要在Intent中可视化服务结果,请调用Intent intent=new Intent(context,VisualizingActivity.class); intent.putExtra("A", "Data A"); intent.putExtra("B", "Data B"); context.startActivity(intent); 并将任何详细信息传递给其他内容,例如。

服务中的调用......

String A= intent.getStringExtra("A");
String B= intent.getStringExtra("B");

活动中的处理......

Notification

如果您只想创建AsyncTask,可以直接从服务中创建Activity。不需要{{1}}或{{1}}。

希望这有点帮助......干杯!