Я новичок в Android. Я запускаю службу в Phone Boot Up. Я хотел бы управлять этим сервисом из активности, которую я запустил позже. Однако я не могу этого сделать.
Это потому, что я запускаю сервис из BroadCastReceiver и есть какая-то проблема с контекстом? Можете ли вы дать мне знать, что я делаю неправильно и как мне поступить? Буду признателен, если кто-нибудь сможет объяснить, как решить эту проблему.
Вот мои файлы:
MyPhoneBoot.java
package phone.Boot;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class MyPhoneBoot extends android.content.BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
Log.d("MyPhoneBoot", "Phone Boot Captured");
Intent expIntent=new Intent(context,MyService.class);
context.startService(expIntent);
}
}
MyService.Java
package phone.Boot;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service {
public static String TAG="MyNewService";
public static int service_running=999;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
service_running=2;
Log.d(TAG, "onCreate");
Log.d(TAG, "Value " + MyService.service_running);
}
@Override
public void onDestroy() {
service_running=(-2);
Log.d(TAG, "onDestroy");
Log.d(TAG, "Value " + MyService.service_running);
}
@Override
public void onStart(Intent intent, int startid) {
service_running=1;
Log.d(TAG, "Value " + MyService.service_running);
Log.d(TAG, "Service has been started!");
}
public void onStop(Intent intent, int startid) {
service_running=(-1);
Log.d(TAG, "Value " + MyService.service_running);
Log.d(TAG, "Service has been stopped!");
}
}
MyActivity.Java
package phone.Boot;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MyActivity extends Activity implements OnClickListener{
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d("MyActivity", "MyActivity running!" + MyService.service_running);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button myButton, myButton2;
myButton = (Button) this.findViewById(R.id.button_1);
myButton.setOnClickListener(this);
myButton2 = (Button) this.findViewById(R.id.button_2);
myButton2.setOnClickListener(this);
/* changes done for binding service */
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch(arg0.getId()){
case R.id.button_1:
switch (MyService.service_running)
{
case 2:
Log.d("MyActivity", "Starting already created service!");
Toast.makeText(this, "Alrdy created -> Starting now!", Toast.LENGTH_SHORT).show();
startService(new Intent(this,MyService.class));
break;
case 1:
Log.d("MyActivity", "Trying to start existing service!");
Toast.makeText(this, "Alrdy Running!", Toast.LENGTH_LONG).show();
break;
case -2:
case 999:
Log.d("MyActivity", "Re-Starting Service");
Toast.makeText(this, "Re-Starting Service!", Toast.LENGTH_SHORT).show();
startService(new Intent(this,MyService.class));
break;
}
break;
case R.id.button_2:
if(MyService.service_running == -1 || MyService.service_running == -2 || MyService.service_running == 999)
{
Log.d("MyActivity", "No Service To Stop!");
Toast.makeText(this, "Nothing to Stop! x-(", Toast.LENGTH_LONG).show();
}
else if(MyService.service_running == 1 || MyService.service_running == 2)
{
Log.d("MyActivity", "Halting Service!!");
Toast.makeText(this, "Stopping Service!", Toast.LENGTH_LONG).show();
stopService(new Intent(this,MyService.class));
}
break;
}
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="phone.Boot"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name="MyPhoneBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED">
</action>
</intent-filter>
</receiver>
<service android:enabled="true" android:name=".MyService" />
<activity android:name="phone.Boot.MyActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
</manifest>