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 に答える