gpt4 book ai didi

Activity中Service中的Android调用方法

转载 作者:行者123 更新时间:2023-12-04 12:52:36 25 4
gpt4 key购买 nike

我想在 Service 中调用一个方法来自 Activity 的对象对象,但是我发现无法从 MainActivity 调用该方法一般。

我希望我的代码能更好地解释我的意思:

服务:

public class Timer extends Service {

public Vibrator v;
public MainActivity ma;
public CountDownTimer mycounter;
public static final String MY_SERVICE = "de.example.timer.MY_SERVICE";

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

public void onCreate()
{
super.onCreate();
ma = new MainActivity();
v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
startService();
}

public void startService()
{
mycounter = null; //delete counter
mycounter = new CountDownTimer(5000, 100){
public void onTick(long millisUntilFinished) {
//ma.timer.setText(ma.formatTime(millisUntilFinished+1000));
//ma.builder.setContentText("Timer: " + ma.formatTime(millisUntilFinished+1000)); //update Timer
//ma.notificationManager.notify(MainActivity.MY_NOTIFICATION_ID, ma.builder.build());

//It is not possible to call a methode this way in a service..
}

public void onFinish() {
//ma.timer.setText("00:00:00");
v.vibrate(1000);
mycounter.cancel();
mycounter.start();
}
};
mycounter.start();
}

public void onDestroy()
{
super.onDestroy();
mycounter.cancel();


}
}

Activity :
public class MainActivity extends Activity { 

private ImageButton imagebutton;
public Vibrator v;
public TextView timer;
public boolean pressed;
public String output;
public long waitingtime;
public Timer service;

public static final int MY_NOTIFICATION_ID = 1;
public NotificationManager notificationManager;

public Context context;
public Builder builder;

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

pressed = false;
waitingtime = 600000; // Standartmäßig auf 10 min

v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

imagebutton = (ImageButton) findViewById(R.id.imageButton1);
imagebutton.setBackgroundResource(R.drawable.start);
timer = (TextView) findViewById(R.id.timer);
timer.setText(formatTime(waitingtime));

Intent intent = new Intent (this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);

PendingIntent pend = PendingIntent.getActivity(this, 0, intent, 0);
notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

context = getApplicationContext();
builder = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.notlogosmall)
.setContentTitle("Start!")
.setContentText("Timer set to " + waitingtime/1000 + " seconds")
.setContentIntent (pend)
.setTicker("Go!")
.setWhen(System.currentTimeMillis())
.setDefaults(0)
.setAutoCancel(false)
.setOngoing(true);
}

public void press(View view){
if(pressed == false){
imagebutton.setBackgroundResource(R.drawable.stop);
pressed = true;
notificationManager.notify(MY_NOTIFICATION_ID, builder.build()); //Notification
v.vibrate(100);
hidebuttons();
startService(new Intent(Timer.MY_SERVICE));
}
else{
imagebutton.setBackgroundResource(R.drawable.start);
pressed = false;
notificationManager.cancel(1);
timer.setText(formatTime(waitingtime));
showbuttons();
stopService(new Intent(Timer.MY_SERVICE));
v.vibrate(100);
}
}

如何从另一个类的对象调用一个对象的方法?

最佳答案

接受的答案没有错,但非常复杂。

将此添加到 Activity 中:

Intent i = new Intent(this, SERVICE_NAME.class);
i.setAction("YOUR_ACTION");
startService(i);

这对服务:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null && intent.getAction() != null && intent.getAction().equals("YOUR_ACTION")) {
invokeServiceMethod(); // here you invoke the service method
}
return START_STICKY; // or whatever floats your boat
}

关于Activity中Service中的Android调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21667392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com