Java 手机开机时自动启动服务
我解释我想要我的应用程序做什么: 用户打开电话,我的服务启动并执行他的代码。 问题是目前服务还没有启动…我看不到日志或toast 这是舱单:Java 手机开机时自动启动服务,java,android,Java,Android,我解释我想要我的应用程序做什么: 用户打开电话,我的服务启动并执行他的代码。 问题是目前服务还没有启动…我看不到日志或toast 这是舱单: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="complic.bevoip"> <uses-permission andr
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="complic.bevoip">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RECEIVE_REBOOT" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<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/AppTheme">
服务呢
public class SipService extends Service {
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
Log.d("BeVoip", "service partito");
startActivity(new Intent(this, MainActivity.class));
return Service.START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Service Destroy", Toast.LENGTH_LONG).show();
}
}
您的
BroadcastReceiver
未被调用,因为针对Android 7.0(API级别24)及更高版本的应用程序必须使用registerReceiver(BroadcastReceiver,IntentFilter)
注册以下广播
在清单中声明接收者不起作用
您必须按照以下方式动态注册接收器
Receiver myReceiver = new Receiver ();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
intentFilter.addDataScheme("package");
getApplicationContext().registerReceiver(myReceiver, intentFilter);
关于android:process=“:remote”
广播接收器应在其中运行的过程。应用程序的所有组件都在为应用程序创建的默认进程中运行。它与应用程序包同名
如果分配给此属性的名称以冒号(“:”)开头,则会在需要时创建应用程序专用的新进程,并在该进程中运行广播接收器
您可以在此处阅读有关接收器属性的信息:
您可以在此处参考BroadcastReceiver
的文档:
您的广播接收器
未被调用,因为针对Android 7.0(API级别24)及更高版本的应用程序必须使用注册器Receiver(BroadcastReceiver,IntentFilter)注册以下广播
在清单中声明接收者不起作用
您必须按照以下方式动态注册接收器
Receiver myReceiver = new Receiver ();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
intentFilter.addDataScheme("package");
getApplicationContext().registerReceiver(myReceiver, intentFilter);
关于android:process=“:remote”
广播接收器应在其中运行的过程。应用程序的所有组件都在为应用程序创建的默认进程中运行。它与应用程序包同名
如果分配给此属性的名称以冒号(“:”)开头,则会在需要时创建应用程序专用的新进程,并在该进程中运行广播接收器
您可以在此处阅读有关接收器属性的信息:
您可以在此处参考BroadcastReceiver
的文档:
可能重复的@crammeur该答案对我没有帮助…这是你收到的广播吗?这是文档可能重复的@crammeur该答案对我没有帮助…这是文档收到的广播吗?这是文档谢谢,但是…如果用户打开应用程序一次,这将起作用,但我希望服务在手机启动后立即启动是开机了,还是我说错了什么?不管怎样,我把那段代码放在了主活动中,但它仍然不工作。请将以下属性设置为receiverandroid:exported=“true”android:enabled=“true”
谢谢,但是……如果用户打开应用程序一次,但我希望在手机通电后立即启动服务,或者我说了一些错误的话,这将起作用。无论如何,我将这段代码放在主活动中,但它仍然不起作用。请在menifest文件中将以下属性设置为receiverandroid:exported=“true”android:enabled=“true”
Receiver myReceiver = new Receiver ();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
intentFilter.addDataScheme("package");
getApplicationContext().registerReceiver(myReceiver, intentFilter);