我创建了一项服务,并希望始终运行此服务,直到我的手机重新启动或强制关闭.该服务应该在后台运行.
创建的服务和启动服务的示例代码:
启动服务:
Intent service = new Intent(getApplicationContext(), MyService.class);
getApplicationContext().startService(service);
Run Code Online (Sandbox Code Playgroud)
服务:
public class MyService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO do something useful
HFLAG = true;
//smsHandler.sendEmptyMessageDelayed(DISPLAY_DATA, 1000);
return Service.START_NOT_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
// TODO for communication return IBinder implementation
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
清单声明:
<service
android:name=".MyService"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
</service>
Run Code Online (Sandbox Code Playgroud)
是否可以像应用程序暂停和其他任何操作一样运行此服务.一段时间后,我的应用程序暂停,服务也暂停或停止.那么如何在后台运行此服务并始终如此.
此代码将在启动系统后自动运行应用程序,但按下后退按钮后应用程序将关闭.
如果应用程序通过单击它的图标正常运行.即使按下后退按钮或运行其他应用程序,它也会继续运行.
public class AutoBoot extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MyActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,即使在按下后退按钮或运行其他应用程序后,如何使此自动运行代码继续运行?
我有这个应用程序需要运行定期发出蜂鸣声的服务(背景).手机需要每隔一分钟发出一声哔哔声,持续5秒钟(在服务中使用了一个处理程序).我已经实现了这项完美的服务,但是当手机进入深度睡眠模式时,此处理程序的执行停止会停止.使用这种从SO问题的答案,我设法利用唤醒锁定并能正常工作.但是当我明确地将手机置于深度睡眠模式时,处理程序停止执行.我在哪里将唤醒锁放在服务中.下面的代码片段.
public class PlaySound extends Service{
PowerManager.WakeLock wl ;
PowerManager pm;
private SoundManager mSoundManager;
boolean wakeUpFlag = false;
@Override
public void onCreate(){
super.onCreate();
mSoundManager = new SoundManager();
mSoundManager.initSounds(getBaseContext());
mSoundManager.addSound(1, R.raw.sound);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
startservice();
return START_STICKY;
}
private void startservice() {
System.out.println("Started the service");
timer.scheduleAtFixedRate( new TimerTask() {
public void run() {
toastHandler.sendEmptyMessage(0);
}
}, 0, 60000);
}
private final Handler toastHandler = new Handler()
{
@Override
public void handleMessage(Message …Run Code Online (Sandbox Code Playgroud) 我在一个Music类中的媒体播放器从另一个辅助节点调用Activity.它工作正常.
但是当屏幕熄灭时(通过超时或按钮),音乐停止播放,当回来并尝试关闭活动时,程序进入"应用程序无响应",因为IllegalStateException在查询时如此mediaplayer.isPlaying().
如何在屏幕关闭时阻止媒体播放器停止?
它必须通过服务?
假设答案是肯定的,我试图将Music类转换为服务(见下文).我也加入<service android:enabled="true" android:name=".Music" />了Manifest.xml,我正在调用这样的Music类:
startService(new Intent(getBaseContext(), Music.class));
Music track = Music(fileDescriptor);
Run Code Online (Sandbox Code Playgroud)
主Activity中只有2个新行startService(new Intent(getBaseContext(), Music.class));和stopService(new Intent(getBaseContext(), Music.class));,以及相应的导入.
但现在我得到InstantiationException错误,因为can't instantiate class在尝试启动服务时.我错过了什么?
这是例外:
E/AndroidRuntime(16642): FATAL EXCEPTION: main
E/AndroidRuntime(16642): java.lang.RuntimeException: Unable to instantiate service com.floritfoto.apps.ave.Music: java.lang.InstantiationException: can't instantiate class com.floritfoto.apps.ave.Music; no empty constructor
E/AndroidRuntime(16642): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2249)
E/AndroidRuntime(16642): at android.app.ActivityThread.access$1600(ActivityThread.java:127)
E/AndroidRuntime(16642): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1213)
E/AndroidRuntime(16642): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(16642): …Run Code Online (Sandbox Code Playgroud) 我有一个USB设备,我使用USB主机模式与Android应用程序连接.设备大约每10秒发送一些数据,但在某些情况下(高优先级数据),数据可以随时发送.在Android应用程序端,我有一个使用USB主机模式API读取数据的服务.我的Android应用程序处理数据并将数据写回USB设备.现在一切正常,直到Android设备进入睡眠状态.该服务暂停,所有通信都停止.我知道我可以使用部分唤醒锁来保持CPU运行和通信进行,并且它会对电池产生巨大影响.我有两个问题:
由于USB设备可以随时发送数据,我真的需要Android服务一直处于活动状态,特别是因为可以随时获得更高优先级的数据.这可能意味着我获得了部分唤醒锁并且永远不会释放它.如果允许的话,没有能够在文档中找到,如果是,除了耗尽电池之外还有什么后果?
USB主机模式API或任何其他API是否提供了不同且可能更好的解决方案?
该应用程序是一个用户有限的自定义应用程序,因此电池耗尽不是一个大问题.我只是想了解是否还有其他问题需要注意,或者是否有更好的方法来做到这一点.