Android使用(待定)Intent停止服务

时间:2016-08-12 11:30:51

标签: android android-intent android-service android-notifications

我有方法

    private Notification getNotification() {

    Activity currentActivity = MyApplication.getApplication().getCurrentActivity();
    Intent i = new Intent(currentActivity, SpeechActivationService.class);
    i.putExtra(ACTIVATION_STOP_INTENT_KEY, true);
    PendingIntent resultPendingIntent = PendingIntent.getActivity(currentActivity, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
    NotificationCompat.Action action = new NotificationCompat.Action(R.drawable.ic_mic_off, "Deactivate", resultPendingIntent);

    Notification notification = new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.ic_mic)
        .setTicker("TickerSample")
        .setWhen(System.currentTimeMillis())
        .setContentTitle("My App Voice Control")
        .setContentText("Voice Control is Activated")
        .addAction(action)
        .build();

    return notification;
}

只要服务处于活动状态,就应该发出保持活动状态的通知。通知有一个DEACTIVATE按钮,它可以发送一个Intent,包含在Pending Intent中(不管有什么区别?!)。似乎Intents是处理按钮点击的通知可以采取的唯一行动形式,所以我不能做

stopService(new Intent(this, SpeechActivationService.class));

关于那个停赛。但是当我点击DEACTIVATE时,我的代码onStartCommand()在SpeechActivationService中永远不会被调用。并且服务不会继承onNewIntent()方法。那么当我通过按DEACTIVATE发送此意图时会调用什么方法?

2 个答案:

答案 0 :(得分:2)

  

那么当我通过按DEACTIVATE发送这个意图时会调用什么方法?

什么都不会。您正尝试将getActivity() PendingIntentIntent一起用于指向服务。这不起作用,你应该在LogCat中收到相应的消息。

如果您将getActivity()更改为getService(),则应调用您的onStartCommand()服务。

答案 1 :(得分:1)

待定意图用于控制应用程序的内容(系统功能使用这些内容)。对于停止服务创建BroadcastReceiver,它将接收待定意图(PendingIntent.getBroadcast()),这反过来将停止您的服务