1

私のアプリケーションでは、Receiver からサービスを呼び出したいと考えています。

これは私の NotificationReceiver.java です

 public class NotificationReceiver extends BroadcastReceiver {

    NotificationReceiver _this = this;
    private static Context _context;
    public static final String ACTION_REFRESH_SCHEDULE_ALARM = "com.example.receiver.ACTION_REFRESH_SCHEDULE_ALARM";
    String SERVER_URL = "http://192.168.1.7:8080";

    @Override
    public void onReceive(final Context context, Intent intent) {
        _context = context;
        initClient();
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(_context);


        if (settings.getString("userId",null) != null){

            gotNotification(new ClientListener(){
                @Override
                public void onSuccess(String response) {
                    try {
                        JSONObject object = new JSONObject(response);

                        System.out.println("Service object = "+ object);


                    } catch (JSONException e) {
                        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                    }
                }
                @Override
                public void onFail(int error) {

                }
                @Override
                public void onCancel() {

                }

            },settings.getString("userId",null));
        }
    }

    private void initClient(){
        NotifierRestClient.init(SERVER_URL + "/api");
    }

    private void gotNotification (final ClientListener clientListener, final String uId) {
        new Thread() {
            @Override
            public void run() {
                try {
                    final String responseText = NotifierRestClient.getUserNotifications(uId,null);
                    if (clientListener != null) {
                        clientListener.onSuccess(responseText);
                    }
                } catch (final Exception e) {
                    e.printStackTrace();
                    if (clientListener != null) {
                        clientListener.onFail(505);
                    }
                }
            }
        }.start();
    }
}

そして、これは私のNotifiactionService.javaです

public class NotificationService extends Service {

    private AlarmManager alarmManagerPositioning;
    private PendingIntent pendingIntent;

    @Override
    public void onCreate() {
        super.onCreate();

        alarmManagerPositioning = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

        final Intent intentToNotificate = new Intent(NotificationReceiver.ACTION_REFRESH_SCHEDULE_ALARM);
        pendingIntent = PendingIntent.getBroadcast(this, 0, intentToNotificate, 0);
    }

    @Override
    public void onStart(Intent intent, int startId) {
        try {

            long notificationInterval = 5002;

            alarmManagerPositioning.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), notificationInterval, pendingIntent);
        } catch (NumberFormatException e) {
            Toast.makeText(this, "error running services: " + e.getMessage(), Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            Toast.makeText(this, "error running services: " + e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }

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

    @Override
    public void onDestroy() {

        this.alarmManagerPositioning.cancel(pendingIntent);


    }
}

私の質問は、NotificationReceiver で NotificationService を呼び出して間隔を変更する方法です。どんな助けでも役に立ちます ありがとう

4

1 に答える 1

4

を使用して受信機でサービスを開始します

Intent in = new Intent(context,NotificationService.class);
in.putExtra("interval",5001);
context.startService(in);

あなたのサービスコードでは、

long notificationInterval = intent.getLongExtra("interval", defaultValue)

レシーバーからデータを取得するには onStartCommand(Intent intent, int flags, int startId)、 を使用してください。onStart は廃止されました。

于 2012-06-22T08:10:05.123 に答える