-1

ユーザーがスピナーから選択したアクティビティから時間値をサービスに渡して、オーディオクリップがその時間再生されるようにしようとしています。これまでのところエラーは発生していませんが、サービスは要求された時間再生されません。エラーがないため、logcat を投稿しませんでした。見落としている単純なものであると想定しています。アクティビティから TIME_IN_MINUTES 値を取得し、サービスをその時間だけ再生したいと考えています。

サービスクラス

@Override
public void onStart(Intent intent, int startid) {
    long time = 0;
    if (intent.hasExtra("TIME_IN_MINUTESC")) {
        time = intent.getLongExtra("TIME_IN_MINUTES", 1000);
    }
    Toast.makeText(this, "Ship Service Started for" + time, 
Toast.LENGTH_LONG).show();
    Log.d(TAG, "onStart");
    myPlayer.start();
}
}

アクティビティクラス。

  @Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.ship);
    button2 = (Button) findViewById(R.id.btn2);
    button2.setOnClickListener(this);
    stop1 = (Button) findViewById(R.id.stop);
    stop1.setOnClickListener(this);
    spinner2 = (Spinner) findViewById(R.id.spinner2);
    ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(this,
    android.R.layout.simple_spinner_item, TIME_IN_MINUTES);

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner2.setAdapter(adapter);
    Intent intService =  new Intent(Ship.this, Shipservice.class);
    intService.putExtra("TIME_IN_MINUTES", 1000);

}

// Handle button callback
@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.btn2:
        Log.d(TAG, "onClick: starting service");
        startService(new Intent(this, Shipservice.class));
        break;
    case R.id.stop:
        Log.d(TAG, "onClick: stopping srvice");
        stopService(new Intent(this, Shipservice.class));
        break;
    }
4

2 に答える 2

1

このように開始サービスを開始していませんService..

Intent intService =  new Intent(Ship.this, Shipservice.class);
intService.putExtra("TIME_IN_MINUTES", 1000);
startService(intService);

ボタンonClickでサービスを開始しましたが、そのインテントには値がありません。Service同じで開始するIntnetか、 new にデータを追加しますIntnet

または、このメソッドを次のように変更するだけです..

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.btn2:
        Log.d(TAG, "onClick: starting service");
        startService(intService);
        break;
    case R.id.stop:
        Log.d(TAG, "onClick: stopping srvice");
        stopService(intService);
        break;
    }

プライベート変数として使用intservice..

于 2013-11-13T06:29:02.477 に答える
0

アクティビティクラスでこれを試してください

intent = new Intent(this, Service.class);
    intent.putExtra("key", resultReceiver);

    startService(intent);
}

private final ResultReceiver resultReceiver = new ResultReceiver(
        new Handler()) {
    @SuppressWarnings("unchecked")
    @Override
    protected void onReceiveResult(int resultCode, Bundle resultData) {
        progressBar.setVisibility(View.GONE);
        //do functionality
    };
};

サービスクラスで;-

@Override
protected void onHandleIntent(Intent intent) {
    // TODO Auto-generated method stub
    // TODO Auto-generated constructor stub

           //do functionality


    Bundle bundle = new Bundle();
    bundle.putSerializable("key", "data to send");
    ResultReceiver receiver = intent.getParcelableExtra("key");
    receiver.send(0, bundle);

}
于 2013-11-13T06:37:27.010 に答える