0

我的英语很差。我无法在启动时启动 android 服务,我不知道问题所在。我正在尝试示例代码,但没有成功。有人可以发给我一个运行的 Java 项目吗?其他代码适用于其他人,但在我的平板电脑智能手机模拟器上它不起作用。android 4.0是否存在问题?

这是我的代码:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.service22"
    android:versionCode="1"
    android:versionName="1.0" 
    android:installLocation="internalOnly"
    >

    <supports-screens android:largeScreens="false" android:normalScreens="true" android:smallScreens="false"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
            <service android:name="com.example.MyService">
                <intent-filter>
                    <action android:name="com.example.MyService">
                </action>
            </intent-filter>
        </service>
        <receiver android:name="com.example.MyReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED">
                </action>
                <category android:name="android.intent.category.HOME">
                </category>
            </intent-filter>
        </receiver>
    </application>



</manifest>



    public class MyService extends Service 
    {

       private static final     String LOG_TAG = "::Monitor";


    @Override
    public void onCreate() {
        super.onCreate();
        Log.e(LOG_TAG, "Service created.");
    }

    @Override
    public void onStart(Intent intent, int startId) 
    {
        super.onStart(intent, startId);

        for (int i = 0 ; i < 20 ; i++)
        {
            mensaje();
        }



        Log.e(LOG_TAG, "Service started.");
    }
    @Override
    public void onDestroy() 
    {
           super.onDestroy();
           Log.e(LOG_TAG, "Service destroyed.");
    }

    @Override
    public IBinder onBind(Intent intent) 
    {
        Log.e(LOG_TAG, "Service bind.");
        return null;
    }



   public void mensaje()
   {
       Toast.makeText(this, "Hola", Toast.LENGTH_LONG).show();
   }

}



     public class MyReceiver extends BroadcastReceiver 
{
    public MyReceiver() 
    {
    }

    String LOG_TAG = "::StartAtBootServiceReceiver";

    @Override
    public void onReceive(Context context, Intent intent) 
    {

        Log.e(LOG_TAG, "onReceive:");
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Intent i = new Intent();
            i.setAction("com.example.MyService");
            context.startService(i);
        }



    }

}
4

3 回答 3

3
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class OnBootReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    Log.d("OnBootReceiver", "Hi, Mom!");
  }
}

和清单文件

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  <application android:icon="@drawable/cw"
               android:label="@string/app_name">
    <receiver android:name=".OnBootReceiver">
      <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
      </intent-filter>
    </receiver>
  </application>
于 2012-07-24T23:44:11.897 回答
0

重要提示:Android OS 3.1+ 在以下情况下仍然会忽略您的广播接收器: 1.用户从未明确启动过应用程序至少一次。
2.用户已“强制关闭”应用程序。

问题与您的实施无关。这是 Google 已关闭的 Android 中的一个潜在安全漏洞 :)

于 2012-11-14T10:12:31.663 回答
0

我认为:

Intent i = new Intent();
i.setAction("com.example.MyService");
context.startService(i);

还不够,您必须像这样设置意图类名称:

Intent i = new Intent();
i.setClassName("com.example", "com.example.MyService");
i.setAction("com.example.MyService");
context.startService(i);

请尝试一下。

于 2012-07-25T07:35:34.360 回答