2016-10-12 1 views
0

自分のプロジェクトのBroadcastReceiverをGcmNetworkManagerに置き換えたいと思います。だから私はいくつかのチュートリアルを読んで、そのように実行します。
1)マニフェストで私が追加:GcmTaskServiceが動作しません

<service android:name=".WakeOnLanService" 
     android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY"/> 
     </intent-filter> 
    </service> 

2)サービス:

public class WakeOnLanService extends GcmTaskService { 

@Override 
public int onRunTask(TaskParams taskParams) { 
    return GcmNetworkManager.RESULT_SUCCESS; 
} 

@Override 
public int onStartCommand(Intent intent, int i, int i1) { 
    Toast.makeText(this,"Выполнилось",Toast.LENGTH_SHORT).show(); 
    return super.onStartCommand(intent, i, i1); 
} 
} 

3)活動のスケジュール:

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    GcmNetworkManager mGcmNetworkManager = GcmNetworkManager.getInstance(this); 
    Task task = new OneoffTask.Builder() 
      .setService(WakeOnLanService.class) 
      .setExecutionWindow(0, 2) 
      .setTag("MyTag") 
      .setUpdateCurrent(true) 
      .setRequiredNetwork(Task.NETWORK_STATE_CONNECTED) 
      .setRequiresCharging(false) 
      .build(); 
    mGcmNetworkManager.schedule(task); 
} 
} 

しかし、それは仕事ではない、トーストは示されていない。正しい方法と、ブロードキャストレシーバのように、インターネットに接続してGcmNetworkManagerを使用してサービスを実行するベストプラクティスは何ですか?

答えて

2

onStartCommandでコードを実行しないでください。

代わりにonRunTaskを使用してください。

@Override 
public int onRunTask(TaskParams taskParams) { 
    Toast.makeText(this,"Выполнилось",Toast.LENGTH_SHORT).show(); 
    return GcmNetworkManager.RESULT_SUCCESS; 
} 
documentationから

スケジューラがあなたのサービスを開始し

は、新しいスレッドが作成され、 システムはonRunTask()を呼び出します。 によってタスクのロジックを実装し、onRunTask()をオーバーライドします。

インターネットへの接続が確立されたときにタスクを実行します。あなたが本当に必要な場合を除き、それをしないほうが良いです。それがこの作業のポイントです。他のタスクと並行して作業をスケジュールする。インターネット接続が確立されたときに実際に起動する必要がある場合は、BroadcastReceiverを使用してコードを手動で実行する必要があります。この作業は任意の時間には実行できません。

+0

あまりにも動作しません – Kl0nLutiy

+0

私は放送受信機を使用する場合、それはアンドロイドで動作しませんN – Kl0nLutiy

+0

どうしてですか?あなたは ''に登録できませんか? – Knossos

関連する問題