バックグラウンドでネットワーク関連のタスクを実行するために、アンドロイドでサービスを開始しようとしています。私は、サービスである私のアプリケーションのための基本的なネットワークマネージャーを書いています。私は基本的にアンドロイドのドキュメントからチュートリアルを使用しました。基本的な構造は以下の通り行く:サービスは変数に開始/バインドされませんか?
public class MyNetworkManager extends Service {
// some code
private final IBinder mBinder = (IBinder) new MyBinder();
@Override
public IBinder onBind(Intent arg0) {
return mBinder;
}
public class MyBinder extends Binder {
MyNetworkManager getService() {
return MyNetworkManager.this;
}
}
public void onCreate() {
// some network related stuff like setting up sockets etc.
}
public void onStart(Intent intent, int startid) {
while(true) {
// receive new connections etc
}
}
呼び出すアプリ/活動が続いている:
public class AndroidNetworkManagerClient extends Activity {
private Button buttonSend;
private EditText inputText;
private TextView outputText;
private MyNetworkManager networkManager;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder binder) {
networkManager = ((MyNetworkManager.MyBinder) binder).getService();
}
public void onServiceDisconnected(ComponentName className) {
networkManager = null;
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
inputText = (EditText) findViewById(R.id.textInput);
outputText = (TextView) findViewById(R.id.textOutput);
buttonSend = (Button)this.findViewById(R.id.buttonSend);
buttonSend.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (inputText.getText().length() != 0) {
outputText.append("Out: " + inputText.getText() + "\n");
networkManager.sendData("localhost", inputText.getText().toString());
}
}
});
bindService(new Intent(this, MyNetworkManager.class), mConnection, Context.BIND_AUTO_CREATE);
doSomeAppRelatedStuff();
}
bindService()何の問題もなくと呼ばれるように見えますが、変数「NetworkManagerは」常にnullです!私はすでにonCreate()メソッドまたはonServiceConnected()にデバッグしようとしましたが、これらのパーツには全く到達していないようです(少なくともブレークポイントはトリガーされませんでした)。
サービスは、すでにのAndroidManifest.xmlに登録されています
package="some.random.name"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".AndroidNetworkManagerClient"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".MyNetworkManager"></service>
</application>
誰でもアイデア?
こんにちは!あなたは正しいようです! onServiceConnected()にdoSomeAppRelatedStuff()を入れることは、そのトリックを行いました。ありがとう! – user1228633
喜んで助けてください!あなたの問題を解決した場合は、その答えを受け入れてください(チェックボックスをクリックしてください)。 – Argyle