16

私はこの問題を抱えた最初の人ではありませんが、私は非常に多くの解決策を試しました、私は見つけました、そして誰も働きません...多分あなたはエラーを見つけることができました

エラー(他の設定に応じて、.classなしおよび/.Clientありでも発生しました)

12-02 16:40:15.359:W / ActivityManager(74):サービスインテントを開始できません{act = com.android.fh.EnOceanApp.Client.class}:見つかりません

マニフェストでは、これはアプリケーション、アクティビティ外に含まれています(アクティビティおよび「.Client」でも試してみました)

onCreate()のコード

    startService(new Intent(this, Client.class)); 

また

 startService(new Intent(this.getApplicationContext(), Client.class));

また

Intent intent=new Intent("com.android.fh.EnOceanApp.Client.class");
    this.startService(intent);

また

  Intent intent=new Intent("com.android.fh.EnOceanApp.Client");
    this.startService(intent);

そして今、私はもうアイデアを持っていません.... com.android.fh.EnOceanAppはパッケージであり、Client.javaはこのパッケージのサービスクラスです

そして私が忘れたマニフェスト:

  <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".EnOceanAppActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

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

      <activity android:name=".ListView" 
          android:label="List View">
      </activity> 
      <activity android:name=".GraphView" 
          android:label="Graph View">
      </activity>
      <service 
            android:name=".Client"></service> //with and without ., of course without this comment
    </application>
4

8 に答える 8

21

何が起こっているのかを知らせてくれたユーザーnjzk2に感謝します。

私も同じ問題を抱えています。プロジェクトのマニフェストファイルで以前に登録したことがない場合、AndroidOSは要求したサービスクラスを見つけることができないようです。

サービスはアクティビティのようなものですが、グラフィックインターフェイスがないことを忘れないでください。これは、サービスを使用する前にサービスを登録する必要があることを意味します

これは、Androidプロジェクトにサービスを登録する方法です。

<application>
    <!-- your code -->
    <activity>
        <!-- your code  -->
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:name="com.your.own.service.class"></service>
</application>

クラスがサービスにならない場合は、YourServiceクラスをServiceから拡張する必要があることを覚えておいてください。

public class YourService extends Service{}
于 2012-10-20T00:14:48.877 に答える
4

場合によっては、短縮形(.classname)を使用するのではなく、マニフェストでクラス名を完全に修飾する必要があります。別のパッケージのクラスを使用したときに見たことがありますが、サービスインテントがアプリの外部にある可能性があるため、ここで役立つ可能性があります。

于 2011-12-02T22:29:26.010 に答える
2

だから..最終的に他の人を助けるかどうか:

新しいプロジェクトを作成し、ソースをコピーして実行しようとしました。サービスが見つかりました。違いは何でしたか、言い換えれば、問題が発生する可能性があると思います。長いパッケージ名またはcom.androidで始まるものです。。新しいプロジェクトでは、com.enoceanを選択しました

于 2011-12-04T13:33:13.553 に答える
1

この投稿のすべての回答と関連する多くのサービスインテントを開始できません:見つかり ませんサービスインテントを開始できませんが、それでも苦労し、これを実行するのに時間がかかりました。呼び出し元のアプリとは異なるアプリでサービスを開始しようとしているため、シナリオは少し複雑になりました。私はそれを理解しました、そしてここにいくつかのボーナスコードと一緒にすべての詳細があります。

インテントを呼び出すMainActivity(またはどこでも)

Intent intent=new Intent("com.example.core.MusicService.1234");
//Or Intent intent=new Intent("com.example.core.MusicService.TOGGLE_PLAYBACK");
PendingIntent pendingIntent = PendingIntent.getService(this, 99, intent, PendingIntent.FLAG_CANCEL_CURRENT);

マニフェスト: of Service(アプリケーションタグ内のサービスタグ)

    <service android:name="com.example.core.MusicService">
        <intent-filter>
            <action android:name="com.example.core.MusicService1234"></action>
        </intent-filter>
        <intent-filter>
            <action android:name="com.example.core.MusicService.TOGGLE_PLAYBACK"></action>
        </intent-filter>
    </service>

MusicService.java

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if(intent != null){
        if(intent.getAction() != null){
            if(intent.getAction().contentEquals("com.example.core.MusicService.TOGGLE_PLAYBACK")){
                //Do work here
            }
        }
    }
}

ノート

  • サービスを開始する必要はありません。このインテントによりサービスが開始されます
  • 「com.example.core.MusicService1234」と「com.example.core.MusicService.TOGGLE_PLAYBACK」はどのようなものでもかまいませんが、サービスマニフェストのインテントフィルターを呼び出し元のインテントと一致させる必要があります。これらを複数配置できるため、サービスの開始時に、意図からの価値に応じてさまざまなアクションを実行できます。
  • 99は何でもかまいませんが、通知を使用している場合は一意である必要があります
  • インテントフィルターを使用せずに別のアプリ(このような)でサービスを呼び出すことができるかどうかはわかりません-もしそうなら、誰かが私たちに教えてください。試しましたが、うまくいきません。

クレジット:すべての投稿からの累積情報:)

于 2015-01-17T03:23:36.983 に答える
0

マニフェストの別のタグにタグを追加するというばかげた間違いをしました。

その場合、現在のアプリケーションは定義されたサービスを見つけることができませんでした。

あなたがその間違いをスキップすることを願っています:)

ありがとう。

于 2014-03-14T00:24:31.553 に答える
0

アンドロイドのバカな間違いです

これは機能しません

<service
            android:name=".classname"/>

ただし、これは機能します。個別の終了タグがあります

<service
            android:name=".classname"></service>
于 2015-02-12T10:29:04.083 に答える
0

さて、私の場合、私はプロジェクトをきれいにしなければなりませんでした。パッケージ/プロジェクトでサービス用の新しいJavaクラスを作成したが、プロジェクトの後にビルド/クリーンアップしなかった場合に発生することがあります。私の場合、エラーを取り除くためにプロジェクトをクリーンアップする必要がありました。

于 2015-03-01T06:53:15.603 に答える
0

誰かがこれを見て、私がしたのと同じ問題を抱えている場合、それは私がガイドに従い、context.startService()代わりに使用したためでしたcontext.startActivity()

于 2016-04-29T14:41:10.333 に答える