我制作了一个程序,可以随时重复toast
条消息。
因此,我需要在后台运行我的程序。
当toast
处的NickyService.java
消息时,它可以正常工作。
当toast
处的MainActivity.java
消息时,它无法正常工作。
我的代码出了什么问题?
//MainActivity.java
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//go to NickyService.java
Intent intent = new Intent(MainActivity.this, NickyService.class);
startService(intent);
//Toast message right here
Toast.makeText(getBaseContext(), "service started!", Toast.LENGTH_LONG).show();
}
}
//NickyService .java
public class NickyService extends Service {
private Handler handler = new Handler();
private int check = 10;
private Timer timer = null;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
Intent intent1 = new Intent(NickyService.this, MainActivity.class);
startService(intent1);
return START_REDELIVER_INTENT;
}
}
答案 0 :(得分:1)
首先
正如您在onStartCommand
Intent intent1 = new Intent(NickyService.this, MainActivity.class);
startService(intent1);
此处MainActivity.class
不是服务,而是活动
你应该使用
startActivity(intent1);
<强>第二强>
尝试为此类服务创建一个新类
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.widget.Toast;
import java.util.Timer;
/**
* Created by Jamil on 12/28/2014.
*/
public class NickyService extends Service {
private Handler handler = new Handler();
private int check = 10;
private Timer timer = null;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
Toast.makeText(this, "onStartCommand", Toast.LENGTH_LONG).show();
return START_REDELIVER_INTENT;
}
@Override
public void onCreate() {
super.onCreate();
Toast.makeText(this,"Service created", Toast.LENGTH_LONG).show();
}
@Override
public void onStart(Intent intent, int startId) {
super.onCreate();
Toast.makeText(this,"OnStarted", Toast.LENGTH_LONG).show();
}
}
<强>第三强>
我认为你忘了将它放在Application Tag
下的menifest.xml文件中 <service android:name=".NickyService">
</service>
答案 1 :(得分:0)
问题在于您使用的上下文。 使用
getApplicationContext()
代替
getBaseContext()
在Toast消息中。
答案 2 :(得分:0)
@Don Chakkappan这个正确的解决方案。使用RoboGuice。它对依赖注入很有用。
样本用法,
public class SampleClass {
@Inject
Context context;
public void doSomethingOnResume() {
Toast.makeText(context, "Activity has been resumed", Toast.LENGTH_LONG).show();
}
}
你可以注射你需要的物体。