0

このコードで BroadcastReceiver を使用してサービスを開始したい

public void onReceive(Context context, Intent intent) {

    Intent myIntent = new Intent(context,BlueToothService.class);   

    context.startService(myIntent);

}

しかし、サービスを開始できません。サービスとレシーバーもマニフェストに登録しました。

また、1 つ疑問があります。Broadcast Receiver をアクティビティなしで使用できますか?

これは私のサービスクラスです

public class BlueToothService extends Service {

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onStartCommand(Intent intent, int startId) {

    super.onStart(intent, startId);
    Toast.makeText(this, "service Started", Toast.LENGTH_LONG);
    doBluetoothJob();

}

私のマニフェストファイルは次のようになります。

<uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.BROADCAST_SMS" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
    </application>

    <service
        android:name=".BlueToothService"
        android:enabled="true" >
    </service>

    <receiver android:name="com.simsys.bt.DemoBT" >
    </receiver>

    <intent-filter>
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
4

4 に答える 4

6

これは私と一緒に働いています。私はレシーバーを作成しました。

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Toast.makeText(context, "MyReceiver Started", Toast.LENGTH_SHORT).show();
        Intent myIntent=new Intent(context,MyService.class);        
        context.startService(myIntent);
    }
}

次に、シンプルなサービスを作成します

public class MyService extends Service {

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

    @Override
    public int onStartCommand(Intent intent, int flags, int startId){
        Toast.makeText(getBaseContext(), "Service Started", Toast.LENGTH_SHORT).show();
        // We want this service to continue running until it is explicitly
        // stopped, so return sticky.
        return START_STICKY;
    }
}

マニフェスト ファイルにブロードキャスト レシーバとサービスのエントリを作成することを忘れないでください

<application android:icon="@drawable/icon" android:label="@string/app_name">        
<service
    android:enabled="true"
    android:name=".MyService">
    <intent-filter>
        <action
            android:name = "com.rdc.MyService">
        </action>
    </intent-filter>
  </service>
  <receiver
    android:enabled="true"
    android:name=".MyReceiver">
    <intent-filter>
        <action android:name = "android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
  </receiver>
</application>

エミュレータを再起動すると、Toast が表示されます。

于 2012-05-14T15:00:28.947 に答える
1

投稿したマニフェスト ファイルの形式が正しくありません。<service>およびタグはタグにある<receiver>必要があります。このような:<application>

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <service
        android:name=".BlueToothService"
        android:enabled="true" >
    </service>
    <receiver android:name="com.simsys.bt.DemoBT" >
    </receiver>
</application>
于 2012-05-14T15:52:40.550 に答える
0

ServiceサブクラスのonStart()ではなくonStartCommand()をオーバーライドする必要があります。onStart()は減価償却されますが、それでも呼び出す必要がありますが、onStartCommand()をオーバーライドして、それが機能するかどうかを確認することをお勧めします。

さらに、マニフェストファイルでは、service、receiver、およびintent-filterタグがapplicationタグの子である必要があります。受信者は、処理するインテントも宣言する必要があります。例えば

<receiver android:name="com.simsys.bt.DemoBT" >
    <intent-filter>
        <action android:name="com.simsys.bt.intents.StartService" />
    </intent-filter>    
</receiver>
于 2012-05-14T13:34:07.080 に答える
0

トーストを次のように見せてみてください:

Toast.makeText(this, "service Started", Toast.LENGTH_LONG).show();

また、マニフェストのサービス宣言に、次のようにリッスンするインテントを持つ特定のintentfilterを指定する必要があります。

<receiver android:name="com.simsys.bt.DemoBT" >
    <intent-filter>
        <action android:name="your.intent.action.definition" />
    </intent-filter>    
</receiver>
于 2012-05-14T13:42:31.190 に答える