2016-08-10 15 views
0

デバイスの起動時にバックグラウンドサービスを開始しようとしていますが、何も起こっていません。 Autostart.javaOS起動時にバックグラウンドサービスを開始する

​​

AppService.java

package it.test; 

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

public class AppService extends Service { 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onDestroy() { 
     Toast.makeText(this, "My AppService Stopped", Toast.LENGTH_LONG).show(); 
     Log.e("it.Test", "***** SERVICE STOPPED *****"); 
    } 

    @Override 
    public void onStart(Intent intent, int startid) { 
     Toast.makeText(this, "My AppService Started", Toast.LENGTH_LONG).show(); 
     Log.e("it.Test", "***** SERVICE STARTED *****"); 
     /* 
     MainActivity.calc(); 
     MainActivity.save(); 
     */ 
    } 
} 

のAndroidManifest.xml

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

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

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

:これは私のコードです私の電話が起動したときにトーストが表示されません(「私のAppServiceが起動しました」または「私のAppServiceが停止しました」というトースト)が表示されず、アプリケーションによって何も記録されません... 誰でも私のことを知っています間違っている? ありがとう!

編集:私は皆に感謝:)私の問題への解決策を見つけた答えに、多くのデバッグ後にリンクポストTrying to start a service on boot on Androidを見た後に問題 へのソリューション! <application>の内側に追加しましたAndroidManifest.xmlを

変更:また

<receiver android:name="it.test.Autostart"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

<service 
    android:name="it.test.AppService" 
    android:enabled="true" /> 

を追加しました:AppService.java

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    [...] 
    android:installLocation="internalOnly"> 

修正サービスを機能させるために、私はonStartではなくAppServiceクラスonStartCommandですので、クラスonStartを完全に削除しました。 新onStartCommand

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Toast.makeText(this, "My AppService Started", Toast.LENGTH_LONG).show(); 
    Log.e("it.Test", "***** SERVICE STARTED ***** from onStartCommand"); 
    MainActivity.calc(this); 
    MainActivity.save(); 
    return Service.START_REDELIVER_INTENT;//todo I'm not sure about what I have to return 
} 

答えて

0

あなたは、放送受信機を登録する必要があります。

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

あなたのマニフェストファイルでこれを必要とする:

<receiver android:name=".it.test.Autostart"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED"/> 
    </intent-filter> 
</receiver> 
2

あなたの放送受信機がAndroidManifestで登録されていません。 xml

キャスト受信機:

<receiver android:name=".<RECEIVER_NAME>"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
</receiver> 

アプリが外部ストレージにインストールされている場合、BOOT_COMPLETEブロードキャストメッセージは受信されません。これを防ぐには、アプリケーションを内部ストレージにインストールします。 AndroidManifestにこの行を追加するだけでこれを行うことができます。XML

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
android:installLocation="internalOnly" 
... > 

出典:https://stackoverflow.com/a/32938071/1549700

+0

の下でタグを登録する必要がありは '' 追加しなければならない、または流通サービスが呼び出されません。 – Someone

0

は、マニフェストファイルで放送受信機を登録し、すべての問題は、あなたのコードは完璧で、コメントでお願いした場合にも、また、お使いの放送受信機でのブート完了許可を与えてもらいます。

1

あなたはあなたの放送受信機及びサービスは<application>タグ

<!-- [START service_listener] --> 
    <service 
     android:name=".it.test.AppService" 
     android:enabled="true" /> 
    <!-- [END service_listener] --> 

    <!-- [START broadcast_receiver] --> 
    <receiver android:name=".it.test.Autostart"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 
    <!-- [END broadcast_receiver] --> 
+0

''タグと ''タグを追加すると助けになりましたが、十分ではありません: 'Service#onStartCommand'ではなく、サービス#onStartCommand'をオーバーライドする必要があります(魔法使いは非難されています) 'Service#onStart'(魔法使いは非難されます)は無視されなければなりません – Someone

関連する問題