标签: android-service

在Android API中使用Job Scheduler <21

我正在看Vogella的调度教程.它提到了Android的API 21中引入的Job Scheduler API.我的问题是它可以在低于21(Lollipop)但不低于Android版本3(Honeycomb)的API中实现吗?

android android-service

39
推荐指数
5
解决办法
3万
查看次数

Android库Manifest与App Manifest

我在这里已经阅读了类似的问题,但我仍然不清楚几件事情.使用库项目意味着我的整个项目将有两个清单 - 一个用于库,另一个用于"主"应用程序项目 - 我不清楚是什么或哪些有冗余.

我正在开发一个带有"精简"和"付费"版本的应用程序小部件,因此几乎所有代码都在库项目中.作为一个小部件,该库至少会有一个接收器,一个服务,一个配置活动,以及其他一些活动.那么应该在哪里声明这些组件的完整声明 - 包括意图,过滤器等?它们是在库的清单中,还是在应用程序包本身的清单中,引用库中的类(例如android:name ="com.foo.mylibrary.MyService")?

我看过的一些例子似乎在两个清单中都声明了它们,但我怀疑将它们放在一个或另一个中是一个无操作.

android android-manifest android-service android-library android-activity

38
推荐指数
3
解决办法
2万
查看次数

在后台服务中使用Google Play服务LocationClient

我的应用程序旨在定期跟踪用户的位置并将其发送到服务器,最近我使用Google Play服务位置API更改了我的代码.

我创建了locationclient并连接到onStartCommand中的服务

public int onStartCommand(Intent intent, int flags, int startId) {
    setUpLocationClientIfNeeded();
    if(!mLocationClient.isConnected() || !mLocationClient.isConnecting())
    mLocationClient.connect();
    return START_STICKY;

}
Run Code Online (Sandbox Code Playgroud)

在onConnected方法中,我发送一个位置请求,

@Override
public void onConnected(Bundle arg0) {
    System.out.println("Connected ...");
    mLocationClient.requestLocationUpdates(REQUEST, this);

}
Run Code Online (Sandbox Code Playgroud)

REQUEST对象是,

 private static final LocationRequest REQUEST = LocationRequest.create()
      .setInterval(5*60*1000)      // 5 minutes
      .setFastestInterval(3*60*1000) // 3 minutes
      .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
Run Code Online (Sandbox Code Playgroud)

现在的问题是,

  1. onLocationChanged方法不会在给定的时间间隔(即5分钟或最快的时间间隔3分钟)被调用.从我可以看到的日志中,它被调用了两次或三次之后它根本没有被调用(我在1小时后检查).

我上面的代码有什么问题?(我也看不到'断开'的任何日志)

  1. 为了解决这个问题,我尝试使用alarmmanager定期调用该任务.现在,如何通过Locationclient从广播接收器获取单个位置更新.(locationclient.getLastlocation()仅返回最后存储的位置,但它不请求新位置)

android location android-service google-play-services

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

如何可能Service无限运行并且还允许在android中绑定?

我想要一个可以在后台运行的服务,直到我停止,即使启动它的组件被销毁并且还允许绑定到活动.怎么可能?

根据android绑定服务文档 - 有三种创建绑定服务的方法

  1. 扩展Binder类.
  2. 使用Messenger.
  3. 使用AIDL.

我使用messenger创建了绑定服务(第二种方法).Activity在其onStart()方法中绑定到服务,并在其onStop()方法中取消绑定.双向消息传递(在活动和服务之间)正常工作.但问题是,当活动取消绑定服务时,服务就会被破坏.但我想要一个可以无限期运行的服务.

它可以作为Android 服务开发指南 - "尽管本文档通常分别讨论这两种类型的服务,但您的服务可以双向工作 - 它可以启动(无限期运行)并允许绑定.这只是一个问题,你是否实现一些回调方法:onStartCommand()允许组件启动它,onBind()允许绑定."

我还在服务中实现onStartCommand()方法并返回START_STICKY,但它永远不会被调用.查看dev指南中有界服务的生命周期回调,没有onStartCommand()回调方法.那么如何运行服务直到我们停止并允许绑定?

我在fedora 15 OS中使用eclipse平台.

任何帮助.....

java android android-service

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

如果已经运行android,如何防止服务再次运行

在点击按钮我想用方法来启动服务startService(new Intent(currentActivity.this,MyService.class)),但如果服务正在运行,我不想把这种方法做,以避免运行服务,已经running.How这possible.I是同时使用意向的服务服务在同一项目并希望为两者应用相同的条件.

service android android-service

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

Android java.lang.IllegalArgumentException:服务未注册

我有一个看起来像这样的设置:

class MyFragment implements SomeEventListener {

    Application mAppContext;    

    boolean mBound;
    boolean mDidCallUnbind;
    MyIBinder mBinder;
    ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mBound = true;
            mBinder = (MyIBinder) service;
            mBinder.getThings();...
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            mDidCallUnbind = false;
            mBound = false;
            mBinder = null;
        }
    };

    ...

    @Override
    public void onSomeEvent() {
        mAppContext.bindService(...);
    }

    void unbindService() {
        if (mBound && !mDidCallUnbind) {
            mDidCallUnbind = true;
            mAppContext.unbindService(mConnection);
        }
    }

    @Override
    public void onPause() …
Run Code Online (Sandbox Code Playgroud)

android android-service android-service-binding

37
推荐指数
6
解决办法
3万
查看次数

摆脱"导出的服务不需要许可"警告

我正在寻找摆脱警告的解决方案.我甚至不明白它出现的原因.我看了一个没有出现警告的SDK示例.

首先,这是我的清单,我收到警告导出的服务不需要许可:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8"
              android:targetSdkVersion="15" />

    <uses-feature android:name="android.hardware.camera"
                  android:required="true" />

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.Sherlock">
        <service
            android:name=".AuthenticationService"
            android:exported="true">
            <intent-filter>
                <action
                    android:name="android.accounts.AccountAuthenticator" />
            </intent-filter>
            <meta-data
                android:name="android.accounts.AccountAuthenticator"
                android:resource="@xml/authenticator" />
        </service>

        <activity
            android:name=".Test"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
...
Run Code Online (Sandbox Code Playgroud)

虽然Android SDK 的SampleSyncAdapter具有以下清单:

<?xml version="1.0" …
Run Code Online (Sandbox Code Playgroud)

android warnings android-manifest android-service android-activity

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

后台服务在android中被杀死

我们开发了一个Android应用程序,它涉及后台服务.为了实现我们使用的后台服务IntentService.我们希望应用程序每次轮询服务器60 seconds.所以在这里IntentService,服务器在while循环中被轮询.在while循环结束时,我们使用了Thread.sleep(60000)以便下一次迭代仅在60秒后开始.
但是在Logcat我看来,有时需要应用程序唤醒超过5分钟(从睡眠中退出并开始下一次迭代).它永远不会1 minute像我们想要的那样.

这是什么原因?后台服务应该以不同的方式实施吗?

Problem2

Android会在一段时间后终止此​​后台进程(意向服务).不能确切地说什么时候.但有时在后台服务被杀之前的几小时甚至几天.如果你能告诉我这个的原因,我将不胜感激.因为服务并不意味着被杀死.只要我们想要它们,它们就意味着在后台运行.

代码:

@Override
 protected void onHandleIntent(Intent intent) {
  boolean temp=true;
  while(temp==true) {
    try {
      //connect to the server 
      //get the data and store it in the sqlite data base
    }
    catch(Exception e) {
      Log.v("Exception", "in while loop : "+e.toString());
    }
    //Sleep for 60 seconds
    Log.v("Sleeping", "Sleeping");
    Thread.sleep(60000);
    Log.v("Woke up", "Woke up");

    //After this a value is extracted from a table
    final Cursor …
Run Code Online (Sandbox Code Playgroud)

android android-service

36
推荐指数
3
解决办法
5万
查看次数

仅创建一个服务实例(Android)

如何确保只创建一个Service实例?

我已经使用日志记录检查了一些函数(WeatherService是扩展Service的类):

Log.i(TAG, "Start  Id:" + WeatherService.this.hashCode());
Log.i(TAG, "End Id:" + WeatherService.this.hashCode());
Run Code Online (Sandbox Code Playgroud)

即使我确定相同的函数运行两次(下载),它也会提供不同的哈希码:

09-12 01:00:55.195: INFO/WeatherService(7222): Start  Id:1137653208
09-12 01:00:57.235: INFO/WeatherService(7222): Start  Id:1137654296
09-12 01:00:59.035: INFO/WeatherService(7222): Start  Id:1138806536
09-12 01:01:39.085: INFO/WeatherService(7222): End Id:1137654296
09-12 01:01:39.265: INFO/WeatherService(7222): Start  Id:1137654296
09-12 01:02:22.175: INFO/WeatherService(7222): End Id:1137653208
09-12 01:02:24.815: INFO/WeatherService(7222): End Id:1138806536
09-12 01:02:24.836: INFO/WeatherService(7222): Start  Id:1138806536
09-12 01:02:40.275: INFO/WeatherService(7222): End Id:1137654296
Run Code Online (Sandbox Code Playgroud)

我将Activity绑定到服务:

bindService(new Intent(getApplicationContext(),  WeatherService.class)
                               ,mServiceConnection, BIND_AUTO_CREATE);
Run Code Online (Sandbox Code Playgroud)

并且该服务可以运行几分钟直到完成,因此该服务可以被许多活动绑定/创建

android android-service

33
推荐指数
2
解决办法
3万
查看次数

三星"应用程序优化"功能在3天后杀死后台应用程序

我们目前正在开发一款适用于健身追踪应用的Android应用.它在后台不断运行,并且在大多数设备上运行良好,但我们一直在使应用程序在某些三星设备上完全死机.经过一番调查,似乎有些三星设备有一个完全自定义的"应用优化"功能(http://forums.androidcentral.com/samsung-galaxy-s6/599408-app-optimisation-after-updating.html),基本上是Doze功能的(非常)原始版本,存在于Android的更高版本中,如果它们三天没有被使用,它们基本上只是谋杀应用程序.

由于此应用程序或多或少仅执行日志记录,并且未打开活动,因此对我们来说存在很大问题,因为此功能已在许多三星设备上预先启用.通过使用前台服务解决了这个问题,但这是一个解决方案的大锤,需要通过持续通知来扰乱用户,而且我们真的不需要应用程序处于前台 - 我们对正常的电源没问题管理Android.

三星应用程序优化功能明确指出,如果应用程序未使用三天,它将"优化"应用程序.有没有人了解三星认为"被使用"的东西,我能以某种方式触发吗?

侧面咆哮:在我看来,这是一个糟糕的实现功能,使Android上的开发更具敌意.除了我们的用例,它将会破坏任何信使应用程序.如果不是因为Facebook Messenger和Whatsapp很难被豁免应用,那么用户就会疯狂,因为这会破坏他们的体验.

android android-service android-alarms android-wake-lock samsung-touchwiz

33
推荐指数
2
解决办法
4338
查看次数