2015-03-30 5 views
0

Я хочу создать приложение для Android, которое периодически выполняет (каждую минуту) действие в фоновом режиме. Приложение не должно иметь пользовательского интерфейса, поэтому не будет Action-Class. Он запускается автоматически после загрузки.android: BroadcastReceiver RECEIVE_BOOT_COMPLETE не работает

Я закодировал свое приложение, как показано ниже, но он просто не запускается после загрузки? Может ли кто-нибудь помочь?

Я использую Samsung Tablet GT-P5200 с Android 4.4.2

Большое спасибо за вашу помощь заранее.

manifest.xml

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

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <receiver 
     android:name=".BootReceiver" 
     android:enabled="true" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 

    <service 
     android:name=".MyService" 
     android:enabled="true" 
     android:exported="true" > 
    </service> 
</application> 

</manifest> 

BootReceiver.java

package com.somecompany.justoneservice; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.text.format.DateUtils; 
import android.util.Log; 

public class BootReceiver extends BroadcastReceiver { 
    public BootReceiver() { 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("TAG", "BOOT"); 
     long interval = DateUtils.MINUTE_IN_MILLIS * 1; 
     long firstStart = System.currentTimeMillis() + interval; 
     Intent mainServiceIntent = new Intent(context, MyService.class); 
     PendingIntent mainServicePendingIntent = PendingIntent.getService(context, 0, mainServiceIntent, 0); 
     AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     am.setInexactRepeating(AlarmManager.RTC, firstStart, interval, mainServicePendingIntent); 

    } 
} 

MySevice.java

package com.somecompany.justoneservice; 

import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 
import android.util.Log; 

public class MyService extends Service { 
    public MyService() { 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Log.d("TAG", "Service created."); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.d("TAG", "Service started. (" + startId + ")"); 
     return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 
     super.onStart(intent, startId); 
     Log.d("TAG", "Service started."); 
    } 
    @Override 
    public IBinder onBind(Intent arg0) { 
     return null; 
    } 
} 

ответ

1

Приложение не должно иметь пользовательского интерфейса, поэтому не будет Action-Class.

Зарегистрированные зарегистрированные приемники приложений, установленные ранее, отключены, пока что-то не использует явное Intent для запуска одного из ваших компонентов. Обычно этот пользователь нажимает на значок для одного из ваших действий в стартовой панели запуска. И, как правило, это не проблема, потому что все приложения нуждаются в активности, чтобы пользователь мог настроить поведение приложения, получить помощь, прочитать условия лицензионного соглашения и т. Д.

В некоторых сценариях что-то иное, значок стартового экрана запуска может запустить один из ваших компонентов с явным Intent. Например, если вы являетесь плагином для другого приложения, это другое приложение может обнаружить вашу установку и запустить один из ваших компонентов.

Но если ничто не запустит один из ваших компонентов с явным Intent, то ваш приемник BOOT_COMPLETED никогда не получит контроль даже после перезагрузки.

+0

Спасибо за быстрый ответ. Это точно отражает то, что я испытал. когда я добавляю какие-либо действия, приложение начинает отлично после даже после перезагрузки. Еще раз спасибо. – Andreas

Смежные вопросы