我想使用带有此代码的BroadcastReceiver启动服务
public void onReceive(Context context, Intent intent) {
Intent myIntent = new Intent(context,BlueToothService.class);
context.startService(myIntent);
}
但无法启动该服务。 我还在清单中注册了服务和接收者。
我也有一个疑问,我们可以在没有活动的情况下使用广播接收器吗?
这是我的服务类
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>
答案 0 :(得分: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。
答案 1 :(得分: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>
答案 2 :(得分:0)
您需要在Service子类中覆盖onStartCommand()而不是onStart()。 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>
答案 3 :(得分:0)
尝试用以下方式展示你的祝酒词:
Toast.makeText(this, "service Started", Toast.LENGTH_LONG).show();
您需要在清单中为服务声明提供一个特定的意图过滤器,其中包含您希望其收听的意图:
<receiver android:name="com.simsys.bt.DemoBT" >
<intent-filter>
<action android:name="your.intent.action.definition" />
</intent-filter>
</receiver>