相关疑难解决方法(0)

Android服务需要始终运行(从不暂停或停止)

我创建了一项服务,并希望始终运行此服务,直到我的手机重新启动或强制关闭.该服务应该在后台运行.

创建的服务和启动服务的示例代码:

启动服务:

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)

是否可以像应用程序暂停和其他任何操作一样运行此服务.一段时间后,我的应用程序暂停,服务也暂停或停止.那么如何在后台运行此服务并始终如此.

java service android

67
推荐指数
2
解决办法
10万
查看次数

启动时Android BroadcastReceiver - 当Activity在Background中时继续运行

我正在监控收到的短信.

我的应用程序与a完美配合BroadcastReceiver.但它是从一个Activity开始工作,并希望一直保持BroadcastReceiver运行(而不仅仅是我的Activity运行时).

我怎样才能做到这一点?我已经查看了生命周期,BroadcastReceiver但文档中提到的所有内容都是生命周期仅限于onReceive方法,而不是保持BroadcastReceiver检查传入SMS 的生命周期.

我怎么能坚持这个?

谢谢

android broadcastreceiver

51
推荐指数
2
解决办法
7万
查看次数

在Android中创建后台服务

在我的项目中,我需要在android中创建一个服务.我可以像这样注册服务:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >

   <service   android:enabled="true"
    android:name=".ServiceTemplate"/>
      <activity
        android:name=".SampleServiceActivity"
        android:label="@string/app_name" >
        <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
     </activity>
</application>
Run Code Online (Sandbox Code Playgroud)

我在以下活动中调用此服务: -

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Intent service = new Intent(getApplicationContext(), ServiceTemplate.class);
    this.startService(service);
}
Run Code Online (Sandbox Code Playgroud)

但如果我杀死当前活动,该服务也会被破坏.我需要这项服务始终在后台运行.我需要做什么?我该如何注册服务?我该如何开始服务?

service android

13
推荐指数
3
解决办法
4万
查看次数

Android O - 检测后台连接的变化

首先:我知道ConnectivityManager.CONNECTIVITY_ACTION已被弃用,我知道如何使用connectivityManager.registerNetworkCallback.如果阅读JobScheduler,但我不完全确定我是否正确.

我的问题是,当手机与网络连接/断开连接时,我想执行一些代码.这应该在应用程序也在后台时发生.从Android OI开始,如果我想在后台运行我想要避免的服务,则必须显示通知.
我尝试获取有关手机何时使用JobScheduler/JobServiceAPI 连接/断开连接的信息,但它只会在我安排它时执行.对我来说,似乎在这样的事件发生时我无法运行代码.有没有办法实现这个目标?我可能只需要稍微调整一下我的代码吗?

我的JobService:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class ConnectivityBackgroundServiceAPI21 extends JobService {

    @Override
    public boolean onStartJob(JobParameters jobParameters) {
        LogFactory.writeMessage(this, LOG_TAG, "Job was started");
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
        if (activeNetwork == null) {
            LogFactory.writeMessage(this, LOG_TAG, "No active network.");
        }else{
            // Here is some logic consuming whether the device is connected to a network (and to which type)
        }
        LogFactory.writeMessage(this, LOG_TAG, "Job is done. ");
        return …
Run Code Online (Sandbox Code Playgroud)

android android-service android-8.0-oreo

13
推荐指数
1
解决办法
8059
查看次数

在Oreo中没有持续通知的情况下,whatsapp和即时消息应用程序如何在后台运行?

我在stackoverflow和Android文档上学到了什么.最后我得出结论:

无法为连续任务创建后台服务.如果我真的想要一个服务,我应该启动一个前台服务,用户不断看到一个持久的通知"应用程序正在运行".无法隐藏此通知.它是由谷歌有意添加的.是的,还有其他选项,如WorkManagerJobScheduler, 但它们确实定期不连续工作.

我想要的是构建一个即时消息应用程序,它使用xmpp或套接字连续连接到服务器.但它需要连续的连接,但我不想使用前台服务,因为它向用户显示一个恼人的通知"应用正在运行".

问题1: Whatsapp和其他即时消息应用程序如何持续连接到服务器但不显示持久通知?他们是如何做到这一点的?

问题2:如果Whatsapp使用FCM进行通知,那么它也适用于那些没有安装playservices的手机,那么Whatsapp通知机制如何运作?

java android

9
推荐指数
1
解决办法
746
查看次数

有没有办法连续运行服务?

Stack Overflow 上几乎没有类似的问题,但没有一个解决方案对我有用

问题在于只有 OnePlus 和 MI 等少数设备,一旦用户从最近的应用程序中滑动应用程序,该服务就会被终止。

我读到这些 OEM 使用一些激进的策略来终止服务。我只想知道有什么方法可以让服务保持运行或在它被杀死后立即启动它。

我需要运行一项服务,该服务将在后台连续(24/7)提供位置(此应用程序仅适用于特定人群,因此无需担心电池寿命)。

我试过了:

  1. 运行前台服务。

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            startForegroundService(intent)
        } else {
                startService(intent)
        }
    
    Run Code Online (Sandbox Code Playgroud)

    同样在onCreate以通知开始的服务方法中

    @Override
    public void onCreate() {
        Log.i("Service", "onCreate");
        startForeground(NOTIFICATION_ID, getnotification());
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 返回START_STICKYonStartCommand

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    
        initLocationClient();
        initLocationSyncThread();
    
        return START_STICKY;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 重新启动服务onDestroyonTaskRemoved但他们没有被调用。

  4. 绑定服务

  5. 经常安排警报管理器并启动服务,但 Play 商店会警告我们的应用程序使用警报管理器过于频繁,这是一种不好的做法。现在有办法使用 workmanager 安排少于 15 分钟的时间,但仍然不能保证在 15 分钟后开始。

那么除了上述选项之外,还有什么方法可以继续运行服务吗?

android background-process android-service periodic-task

2
推荐指数
1
解决办法
6994
查看次数