java - 无法让 android 服务工作

标签 java android service background

我对 Android 很陌生。我想创建一个在选定时间关闭所有声音的应用程序。我使用一些代码创建了一个服务,在 Eclipse 中没有错误,但是当我按下按钮时没有任何反应。我可以在应用程序管理器中看到我的程序和服务 SilentHours 正在运行。这是我的代码:

MainActivity.java

package com.example.silencecontrol;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
    public final static String EXTRA_NAME = "sending silentHour value to service SilenceHours";

    @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
   }

    public void setSilenceHours(View view) {
        EditText editText1 = (EditText)findViewById(R.id.editText1);
        TextView textView1 = (TextView)findViewById(R.id.textView1);
        if(editText1.length() > 0) {
            Intent intent = new Intent(this, SilentHours.class);
            String editText1String = editText1.getText().toString();
            int silentHour = Integer.parseInt(editText1String);
            intent.putExtra(EXTRA_NAME, silentHour);
            this.startService(intent);
        } else {
            textView1.setText("Please enter the silence hour. ");
        }
   }

}

SilentHours.java

package com.example.silencecontrol;

import java.util.Calendar;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.os.IBinder;

public class SilentHours extends Service {
    public SilentHours() {
    }

    protected void onHandleIntent(Intent intent) {
        int silentHour = Integer.parseInt(intent.getStringExtra(MainActivity.EXTRA_NAME));
        Calendar calendar = Calendar.getInstance();
        int currentTime = calendar.get(Calendar.HOUR_OF_DAY);
        if(currentTime >= silentHour) {
            AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
            audioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0);
            audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

顺便说一句,我无法 @Override onHandleIntent 方法。如果我添加 @Override 注释,则会出现错误:

The method onHandleIntent(Intent) of type SilentHours must override or implement a supertype method.

这个注释有必要吗?

最佳答案

您正在寻找的方法名为 onStartCommand ,而不是 onHandleIntent

不,没有必要将此注释添加到重写方法中,这只是一个非常好的实践,因为您可以确保尊重父类(super class)的签名。

让 IDE 在您编码时为您提供帮助。只需键入“on”,然后要求完成即可查看您可以覆盖哪个方法。

关于java - 无法让 android 服务工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19387561/

相关文章:

java - 安卓 : bundle passing

android - 在 android smack 4.1 中接收重复消息

java - 显示日期和时间

java - onActivityResult 和 "Error Can not perform this action after onSaveInstanceState"中的操作

java - 为什么我无法证明我的代码中需要 AtomicReference?

java - RecyclerView 搜索过滤器过滤结果后位置错误

elasticsearch - 尽管kibana.service正常启动,但Kibana停止工作,现在服务器未准备就绪

c# - Web 服务/wcf 服务,返回数据集是否更好?

java - 作为服务在 Tomcat 上运行 Java 程序

java - Java 对象锁定和监视器创建如何在 JVM 内部发生