0

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);

マニフェストには以下が含まれます。

<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-message も表示されません。お役に立てれば幸いです。

前もって感謝します!

4

1 に答える 1

1

AsyncTaskの中に を使用しないでくださいService結果を現在のアクティビティに返すAsyncTaskタスクにのみ使用する必要があります。つまり、またはで定義する必要があります。そのために設計されています。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

これが少し役立つことを願っています...乾杯!

于 2013-04-04T19:03:20.377 に答える