我试图创建一个没有用户界面的后台服务,我用 BroadcastReceiver
在清单文件里添加了我需要的东西。然后我没有配置任何链接中所写的内容。我在android仿真器上测试,当我执行我的应用程序时,什么都没有发生,服务也没有启动。我的问题在哪里?
这是我的名单
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.myapplication22">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyApplication22">
<service android:name=".MyService" />
<receiver
android:name=".StartReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
</manifest>
这是我的收音机
override fun onReceive(context: Context, intent: Intent) {
Log.i("MYSERVICE","override fun onReceive(context: Context, intent: Intent)")
if (intent.action == Intent.ACTION_BOOT_COMPLETED ) {
Intent(context, MyService::class.java).also {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startService(it)
return
}
context.startService(it)
}
}
}
这是我的服务
class MyService : Service() {
override fun onBind(intent: Intent): IBinder? {
return null
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
if (intent != null) {
println("MYSERVICE STARTED AUTOMATICALLY")
}
return START_STICKY
}
override fun onCreate() {
super.onCreate()
println("MYSERVICE override fun onCreate() {")
}
override fun onDestroy() {
super.onDestroy()
println("MYSERVICE override fun onDestroy() {")
}
}
1条答案
按热度按时间wz1wpwve1#
你的
Service
只有在BOOT_COMPLETED
操作将被接收,所以只有当应用程序已经安装和系统重新启动。当您通过adb安装应用程序时,它不会启动(因为您配置为在安装时不启动任何程序)做一些
Activity
完全透明startService
在onCreate
就在那之后finish()
打电话。包括<activity
舱单上的声明,但没有任何<intent-filter
. 然后,在安装应用程序时,选择指定的活动并指向这个透明的活动,而不是什么都不运行Service
然后就辞职了。没有intent-filter
Activity
在启动程序中不可见,启动它的唯一方法是在as中进行配置当你将你的应用程序发送给最终用户,然后删除
<activity
声明没有实际的方法来运行这个透明的Activity
. 仅限Service
在当前情况下,只能在系统启动时启动顺便说一句,你的nothing链接假设你的应用程序将属于系统,移动到系统分区/文件夹。你有这样的特权吗(在通常的用户设备上,这是不可能的,您需要root权限)没有所有的红色标记行
<application
标签不起作用编辑:
第一步:
创建文件
res/values/styles.xml
在下面加上过去的或现在已经加上的<style
标签第二步:新建
Activity
并以上述方式在清单中声明如果你在下面加上
<intent-filter
至<activity
然后标记这个Activity
显示在系统用户界面(启动器),所以不要这样做,放在这里只是为了通知请注意,您还可以创建多个
<activity
带的标记LAUNCHER
声明(第二次和更进一步MAIN
标签),使你的应用程序显示多个图标,每个图标一个Activity
LAUNCHER
-声明(据我所知,您还可以更改它们的名称和图标)第三步:内部
onCreate
就在之后super.onCreate
打电话开始你的工作Service
然后退出这个无形的Activity
```startService(this, MyService.class); // will start service
finish(); // quits activity