2016-11-24 15 views
0

私は、反応ネイティブのHeadlessJS APIを使用してAndroidでバックグラウンドサービスを実行しようとしています。私はそれを行うには、公式ドキュメントを使用しました:リアクションネイティブのAndroidバックグラウンドサービス

MainTaskファイル:

AppRegistry.registerHeadlessTask('SomeTaskName',() => 'SomeTaskName') 

SomeTaskNameのように見えるの関数である:

package com.test.test; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.widget.Toast; 

    import com.facebook.react.HeadlessJsTaskService; 
    import com.facebook.react.bridge.Arguments; 
    import com.facebook.react.jstasks.HeadlessJsTaskConfig; 

    public class MyTaskService extends HeadlessJsTaskService { 

    @Override 
    protected @Nullable HeadlessJsTaskConfig getTaskConfig(Intent intent) { 
     Bundle extras = intent.getExtras(); 

     if (extras != null) { 
     return new HeadlessJsTaskConfig(
       "SomeTaskName", 
       Arguments.fromBundle(extras), 
       5000); 
     } 
     return null; 
    } 
} 

を私はまた、このようなタスクが登録されましたこれは:

export async function SomeTaskName (taskData) { 
    alert('Esto es una tarea en background') 
} 

私がこのバックグラウンドタスクを引き起こすために使用している方法は、012を使用しています方法:

startService(new Intent(this, MyTaskService.class)); 

私はアンドロイドのコードのさまざまな部分でstartServiceを試みたが、私はすべてのアラートまたは警告のログを見ることができません。

答えて

0

私もこれを理解しようとしています。これまでに私が見つけたものがあります。

サービスを開始するために渡すインテントに「追加」を入れないと、getTaskConfig()はnullを返します。

protected @Nullable HeadlessJsTaskConfig getTaskConfig(Intent intent) { 
    Bundle extras = intent.getExtras(); 

    if (extras != null) { 
    return new HeadlessJsTaskConfig(
      "SomeTaskName", 
      Arguments.fromBundle(extras), 
      5000); 
    } 
    return null; 
} 

どちらか= nullのエキストラのチェックを外し、またはあなたがSTARTSERVICEを呼び出す前に、このような何かを追加します!

Intent myIntent = new Intent(this, MyTaskService.class); 
myIntent.putExtras("isReady",true); 
startService(myIntent); 

また、あなたがマニフェストにサービスを追加します。

 <application> 
     .... 
     <service android:name=".MyTaskService" android:enabled="true" android:label="MyTaskService" /> 
     </application> 
0

あなたは何のエキストラを持っていない意図をサポートするために、あなたのgetTaskConfig方法を変更することができます:

@Override 
protected @Nullable HeadlessJsTaskConfig getTaskConfig(Intent intent) { 
    Bundle extras = intent.getExtras(); 
    WritableMap data = extras != null ? Arguments.fromBundle(extras) : null; 
    return new HeadlessJsTaskConfig(
      "SomeTaskName", 
      data, 
      5000); 
} 

あなたのApplicationクラスはReactApplicationを実装し、初期化ReactNativeHostを返す、例えば必要があります:

private final ReactNativeHost reactNativeHost = new ReactNativeHost(this) { 
    @Override 
    public boolean getUseDeveloperSupport() { 
     return BuildConfig.DEBUG; 
    } 

    @Override 
    protected List<ReactPackage> getPackages() { 
     return Arrays.<ReactPackage>asList(
       new MainReactPackage() 
     ); 
    } 
}; 

@Override 
public ReactNativeHost getReactNativeHost() { 
    return reactNativeHost; 
} 

A. Robが述べたように、マニフェストにサービスを追加する必要もあります。

編集

代わりのReactApplicationを実装する(上記参照)あなたもHeadlessJsTaskServiceprotected ReactNativeHost getReactNativeHost()をオーバーライドすることができますように思えます。

関連する問題