当我通过Receiver销毁并启动时,服务无法启动

时间:2015-01-29 12:27:31

标签: android broadcastreceiver

当我通过Broadcast Receiver开始服务时,它向我展示了logcat

01-29 12:20:33.245: W/ContextImpl(4721): Implicit intents with startService are not safe: Intent { act=actions.com.sound_profile_change.MyService } android.content.ContextWrapper.startService:494 android.content.ContextWrapper.startService:494 actions.com.sound_profile_change.MyReceiver.onReceive:30 
01-29 12:20:33.245: W/ActivityManager(511): Unable to start service Intent { act=actions.com.sound_profile_change.MyService } U=0: not found

在服务方面:

@Override
public void onDestroy() {
    super.onDestroy();
    timer.cancel();
    timerTask.cancel();

    Intent intent = new Intent("This.is.Receiver");
    sendBroadcast(intent);
}

在接收方:

@Override
public void onReceive(Context context, Intent intent) {
     if(context!=null){
          System.out.println("Am in Receiver ");
          System.out.println("Not Null :>>"+context);
          Intent services = new Intent();
          services.setAction(
                "actions.com.sound_profile_change.MyService");
          context.startService(services);
          // context.startService(new Intent(context, MyService.class));

     }else{
           System.out.println("Its Null");
     }
}

In Manifest File:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">


    <activity
        android:name=".MainActivity"
        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=".MyService"
        android:enabled="true" />

    <receiver android:name=".MyReceiver"
        android:enabled="true"
        android:exported="true"
        >
        <intent-filter>
            <action android:name="This.is.Receiver"/>

            <action android:name="android.intent.action.BOOT_COMPLETED"></action>
        </intent-filter>
    </receiver>

</application>

帮助我...

1 个答案:

答案 0 :(得分:0)

&#34;隐含意图&#34;警告你得到的是因为使用Implicit Intents你没有提到特定的组件(例如:服务类的名称)。

隐含意图没有指定组件;相反,他们必须为系统包含足够的信息,以确定哪个可用组件最适合该意图运行。

因此,这意味着现在可以通过给定的Intent-Action通过Android intent-filter机制选择组件。

您可以在启动服务时尝试使用代码:

        Intent services = new Intent(context,MyService.class);//Explicit mention of service class name while creating intent        
        services.setAction("actions.com.sound_profile_change.MyService");
        context.startService(services);

以上代码现在使用&#34;显式意图&#34;。 Explicit Intents指定了一个组件,它提供了要运行的确切类。