2014-09-16 3 views
0

У моего приложения есть служба резервного копирования фотоаппарата. Когда пользователь включит службу, он автоматически резервирует фотографии sd-card на удаленном сервере. Но когда пользователь выключил ОС Android и снова загрузился, служба резервного копирования не запустилась снова.не удалось запустить службу при загрузке

Я читал много статей в Интернете, я делал то же самое, что и они описывали, но оказался неправильным. Возможно, некоторые эксперты могут мне помочь. см. код ниже.

В андроида Manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.seafile.seadroid2" 
     android:versionCode="20" 
     android:versionName="1.0.1" 
     android:installLocation="internalOnly">    
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />  
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />   
    <application 
     android:allowBackup="true" 
     android:name="com.seafile.seadroid2.SeadroidApplication" 
     android:label="@string/app_name" 
     android:icon="@drawable/ic_launcher">    
     <receiver android:name=".OSBootReceiver" > 
      <intent-filter> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 
     <activity android:name="com.seafile.seadroid2.BrowserActivity" 
        android:label="@string/app_name" 
        android:theme="@style/Theme.SeafileTheme" 
        android:launchMode="singleTask"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <service android:name="com.seafile.seadroid2.transfer.TransferService" > </service> 
     <service android:name="com.seafile.seadroid2.monitor.FileMonitorService" > </service> 
     <service android:name="com.seafile.seadroid2.sync.CameraUploadService" > </service>    
    </application> 
</manifest> 

класс OSBootReceiver

public class OSBootReceiver extends BroadcastReceiver { 
    private static final String DEBUG_TAG = "OSBootReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(DEBUG_TAG, "boot to notic receiver"); 

     Intent cameraUploadIntent = new Intent(context, 
       CameraUploadService.class); 
     SharedPreferences settings = PreferenceManager 
       .getDefaultSharedPreferences(context); 
     boolean isUploadStart = settings.getBoolean(
       BrowserActivity.CAMERA_UPLOAD_SWITCH_KEY, false); 
     if (!isUploadStart) { 
      return; 
     } 
     Log.d(DEBUG_TAG, "boot to start service"); 
     context.startService(cameraUploadIntent); 
    } 

} 

этого полный проект с ошибкой запуска службы on github

Я попытался перезагрузиться Os много раз , но не любил ни один журнал, напечатанный! любые советы будут оценены.

ответ

1

Попробуйте проверить загрузки Завершена действие в onReceive(.....) как

if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { 

    Logs("ON Boot completed with System BroadcastReceiver"); 

    //do your job 

} 

, а также установить <intent-filter> как на ваш OSBootReceiver в manifest.xml

 <intent-filter> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
+0

Я изменил код в соответствии с вашим описанием, оказалось, что не удалось распечатать журналы. –

+0

@LoganGuo Нет Нет, это невозможно. вы все еще делаете какую-то ошибку ... публикуете свой манифест и еще какой-то код ... –

+0

@LoganGuo или обратитесь к этому [stackoverflow.com/questions/7690350/android-start-service-on-boot?rq=1](http : //stackoverflow.com/questions/7690350/android-start-service-on-boot? rq = 1) –

0

Правильная receiver запись в манифесте должна быть только

<receiver android:name=".OSBootReceiver" > 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 
+0

Я пробовал это раньше, но не работал для меня. Спасибо, хотя –

0
What is package name used in file OSBootReceiver.java 

If package name is com.seafile.seadroid2, 


**change Receiver in manifest as below:** 

<receiver android:name="com.seafile.seadroid2.OSBootReceiver" > 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

I added like above, and i am getting Boot completed broadcast intent. 

For testing purpose, 
add Toast message in onRecieve method: 


    public class OSBootReceiver extends BroadcastReceiver { 
    private static final String DEBUG_TAG = "OSBootReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

    Toast.makeText(context, "boot completed", Toast.LENGTH_SHORT).show(); 
    Log.e(DEBUG_TAG,"boot completed intent received"); 
} 
} 
+0

Я пробовал, но ничего не произошло, спасибо в любом случае –

+0

это полный проект в github: https: //github.com/Logan676/seadroid/tree/rc –

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

  • Нет связанных вопросов^_^