即使按下主页按钮,如何保持 运行 IntentService
How to keep running an IntentService even when Home button is pressed
我遇到了一个奇怪的问题,当我最小化我的应用程序(按主页按钮)时,我的 IntentService
停止了。 IntentService
中有一个 while 循环,它在 IntentService
中运行良好,直到应用程序在前台 运行。
IntentService
class如下:
public class MainService extends IntentService {
public MainService() {
super("MainService");
}
@Override
protected void onHandleIntent(Intent intent) {
try {
Instrumentation inst = new Instrumentation();
while (true) {
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_VOLUME_DOWN);
}
} catch(Exception e){
e.printStackTrace();
}
}
}
并从我的 Activity
class 中调用它:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void mainButtonClick(View view) {
Intent intentX = new Intent(this, MainService.class);
this.startService(intentX);
}
}
你检查过日志了吗?这不是 IntentService
的问题,问题是您在离开应用程序后无权更改音量。它应该崩溃:
W/System.err: java.lang.SecurityException: Injecting to another
application requires INJECT_EVENTS permission
您需要成为系统应用程序才能使用此权限,因此这在常规 Android 设备上是不可能的。
我遇到了一个奇怪的问题,当我最小化我的应用程序(按主页按钮)时,我的 IntentService
停止了。 IntentService
中有一个 while 循环,它在 IntentService
中运行良好,直到应用程序在前台 运行。
IntentService
class如下:
public class MainService extends IntentService {
public MainService() {
super("MainService");
}
@Override
protected void onHandleIntent(Intent intent) {
try {
Instrumentation inst = new Instrumentation();
while (true) {
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_VOLUME_DOWN);
}
} catch(Exception e){
e.printStackTrace();
}
}
}
并从我的 Activity
class 中调用它:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void mainButtonClick(View view) {
Intent intentX = new Intent(this, MainService.class);
this.startService(intentX);
}
}
你检查过日志了吗?这不是 IntentService
的问题,问题是您在离开应用程序后无权更改音量。它应该崩溃:
W/System.err: java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission
您需要成为系统应用程序才能使用此权限,因此这在常规 Android 设备上是不可能的。