2

onCreate で開始したい IntentService があります。Web サイトに呼び出しを行い、(おそらく) downloadmanager を介してダウンロードを開始するのは、ファイア アンド フォーゲットです。ログステートメントが表示されないため、サービスが開始されているとは思いません。メインと同じパッケージのマニフェストにサービスがあります。また、logcat にも表示されません (別のスレッドがそうすべきだと言っています)。

作成時:

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    Intent heartbeat = new Intent(this, Heartbeat.class);
    startService(heartbeat);
}

※こちらも試しました。startService(heartbeat); それも機能しませんでした。

マニフェスト:

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

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

    <activity
        android:name=".MainActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:label="@string/title_activity_main" >

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

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

* android:enabled フラグの有無にかかわらず違いはありません

IntentService の開始:

public class Heartbeat extends IntentService
{
    public Heartbeat()
    {
        super("Heartbeat");
        Log.v("SUPER", "SUPER");
    }

    @Override
    protected void onHandleIntent(Intent intent)
    {
        Log.v("HERE", "HERE");
        //do other stuff

これらのログ ステートメントはいずれもコンソール/logcat に表示されず、私のサービスは Web サーバーにヒットしません (このコードは以前は asynctask にあり、機能していました)。私が間違っていることについてのアイデアはありますか?

編集 - すべてのメッセージに「サービス インテントを開始できません { act=com.example.vs_1.Heartbeat }: 見つかりません」というタグ ActivityManager からの警告が表示されます。ただし、そのメッセージで見たほぼすべての提案は、アプリケーション タグにマニフェストを配置することでした。これは既に行っています。

4

2 に答える 2

3

ああ、プロットが厚くなります!

「サービスを開始できません」は、警告としてマークされていてもエラーです。

これは、リストされている名前を持つクラスがシステムで見つからないために発生します。この場合、com.example.vs_1.Heartbeat です。

そのクラスがあることを確認するには、ファイル Hearbeat.java が必要です。

パッケージ com.example.vs_1;

public class Heartbeat は IntentService を拡張します...

マニフェストで、要素に属性 package="com.example.vs_1" が含まれている場合、次のように言うことができます

「ハートビート」の前のピリオド (「.」) に注意してください。

「パッケージ」に別の値を使用している場合は、次のように言う必要があります

/com.example.vs_1.Heartbeat" は "package" の値です。

このことから、クラスに単一のメイン パッケージ名を選択し、「パッケージ」値に同じ名前を使用する必要があることは明らかです。

于 2012-11-01T21:33:10.240 に答える
0

メインのアクティビティが正しく開始されていますか?システムがIntentServiceを開始できなかった場合、LogCatはエラーメッセージを表示します。また、これらは「詳細な」メッセージであるため、LogCatがそれらを表示するように設定されていることを確認してください。LogCatを「エラー」に設定している場合、詳細なメッセージは表示されません。

于 2012-11-01T20:04:04.893 に答える