我尝试编写简单的基本应用程序,在手机启动时启动我的服务。
我添加了我需要的所有权限。
我在我的android(android 6.01)上安装了应用程序。 当我重新启动手机时 - 我看不到该服务已启动或已执行任何操作。
代码:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAG" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.NoActionBar">
<service android:name=".MyService" android:enabled="true" android:exported="true"/>
<receiver android:name=".MainBroadcastReceiver" android:enabled="true" android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
public class MainBroadcastReceiver extends BroadcastReceiver {
public MainBroadcastReceiver(){
}
@Override
public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, MyService.class));
}
}
public class MyService extends Service {
private File _file;
private Timer _timer;
private FileOutputStream _fileOutputStream;
public MyService() throws IOException {
_file = new File("/sdcard/" + "myServiceText.txt");
_file.createNewFile();
_fileOutputStream = openFileOutput(_file.getName(), Context.MODE_APPEND);
_fileOutputStream.write("Ctor called".getBytes());
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
_timer = new Timer("timer");
_timer.schedule(new TimerTask()
{
@Override
public void run()
{
try {
_fileOutputStream.write("onCreate Called".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}, 0, 5000);
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
try {
_fileOutputStream.write("onStartCommand".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
return START_STICKY;
}
答案 0 :(得分:1)
您的代码没问题,因为您的应用处于停止状态,因此您的服务未运行。
1. Stopped state是一个安全程序,可让您的应用程序自行唤醒&#34;只有在用户首次从主屏幕手动启动它之后。(Unless you are a system)
通过这样做,可以防止恶意应用程序在您不知道的情况下在手机背景中安装和运行。
2. 如何调试后台进程?
使用后台处理时,您需要两个很棒的工具 -
首先是adb广播命令 -
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
其次是attach remote debugger
(Android Studio):
运行|将调试器附加到android进程(菜单中的最后一个选项) |选择您应用的流程。