タグ付けされた質問 「android-service」

サービスは、ユーザーと対話せずに実行時間の長い操作を実行したい、または他のアプリケーションが使用する機能を提供したいというアプリケーションの要望を表すアプリケーションコンポーネントです。


11
AndroidプラットフォームでのサービスとIntentService
私は(とその逆)IntentServiceで実行できないもので実行できる何かの例を探していますServiceか? 私はまたIntentService、別のスレッドで実行され、Serviceそうではないと信じています。したがって、私が見る限り、独自のスレッド内でサービスを開始することは、を開始することに似ていIntentServiceます。あれは正しいですか?

9
例:メッセージングを使用したアクティビティとサービス間の通信
アクティビティとサービスの間でメッセージを送信する方法の例を見つけることができませんでした。これを理解するのに何時間も費やしました。他の人が参照できるサンプルプロジェクトを次に示します。 この例では、サービスを直接開始または停止し、サービスから個別にバインド/バインド解除することができます。サービスの実行中は、10 Hzで数値が増加します。アクティビティがにバインドされてServiceいる場合、現在の値が表示されます。データは整数および文字列として転送されるため、2つの異なる方法でその方法を確認できます。アクティビティには、メッセージをサービスに送信するためのボタンもあります(増分値を変更します)。 スクリーンショット: AndroidManifest.xml: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.exampleservice" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <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"></service> </application> <uses-sdk android:minSdkVersion="8" /> </manifest> res \ values \ strings.xml: <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">ExampleService</string> <string name="service_started">Example Service started</string> …

4
getApplication()とgetApplicationContext()の比較
私はこれに対する満足のいく答えを見つけることができなかったので、ここに行きます:何が対処されActivity/Service.getApplication()、Context.getApplicationContext()? このアプリケーションでは、どちらも同じオブジェクトを返します。ではActivityTestCaseただし、アプリケーションをあざけることになりますgetApplication()モックで戻って来るが、getApplicationContextまだ別のコンテキストのインスタンス(アンドロイドによって注入1)を返します。それはバグですか?わざとですか? そもそも違いがわかりません。テストスイートの外で、両方の呼び出しが異なるオブジェクトで返されるケースはありますか?いつ、なぜ?さらに、なぜgetApplicationはとで定義されていますがActivity、Serviceでは定義されていませんContextか?常にどこからでも利用できる有効なアプリケーションインスタンスがあるべきではありませんか?

16
Android 8.0:java.lang.IllegalStateException:サービスインテントの開始は許可されていません
アプリケーションの起動時に、アプリはネットワークタスクを実行するサービスを開始します。APIレベル26をターゲットにした後、Android 8.0でアプリケーションがバックグラウンドでサービスを開始できません。 原因:java.lang.IllegalStateException:サービスの開始を許可されていませんIntent {cmp = my.app.tt / com.my.service}:アプリがバックグラウンドuid UidRecord {90372b1 u0a136 CEMアイドルprocs:1 seq(0,0 、0)} 私が理解しているように: バックグラウンド実行制限 startService()メソッドは、Android 8.0をターゲットとするアプリがバックグラウンドサービスの作成が許可されていない状況でそのメソッドを使用しようとすると、IllegalStateExceptionをスローするようになりました。 「それが許可されていない状況で」- それは実際にはどういう意味ですか?そして、それを修正する方法。サービスを「フォアグラウンド」に設定したくない

16
Androidの起動時にサービスを開始しようとしています
Androidでデバイスが起動したときにサービスを開始しようとしましたが、機能しません。私はオンラインでいくつかのリンクを見てきましたが、どのコードも機能しません。何か忘れてる? AndroidManifest.xml <receiver android:name=".StartServiceAtBootReceiver" android:enabled="true" android:exported="false" android:label="StartServiceAtBootReceiver" > <intent-filter> <action android:name="android.intent.action._BOOT_COMPLETED" /> </intent-filter> </receiver> <service android:name="com.test.RunService" android:enabled="true" /> BroadcastReceiver public void onReceive(Context context, Intent intent) { if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { Intent serviceLauncher = new Intent(context, RunService.class); context.startService(serviceLauncher); Log.v("TEST", "Service loaded at start"); } }

6
サービスのコンテキストを取得する
Contextからを取得する信頼できる方法はありますServiceか? ブロードキャストレシーバーを登録したいのですACTION_PHONE_STATE_CHANGEDが、アプリが常にこの情報を取得する必要はないので、には入れませんManifest。 ただし、この情報が必要なときにブロードキャストレシーバーをGCによって強制終了させることはできないため、ブロードキャストレシーバーをに登録していServiceます。 したがって、をContext呼び出すにはtoが必要registerReceiver()です。不要になった場合は、登録ACTION_PHONE_STATE_CHANGEDを解除します。 任意のヒント?


13
Androidサービスにアクティビティと通信させる方法
私は最初のAndroidアプリケーションを作成していて、サービスとアクティビティーの間の通信に頭を悩ませようとしています。バックグラウンドで実行され、いくつかのgpsと時間ベースのロギングを実行するサービスがあります。サービスの開始と停止に使用されるアクティビティがあります。 したがって、最初に、アクティビティが開始されたときにサービスが実行されているかどうかを確認できる必要があります。これについては他にもいくつか質問がありますので、理解できると思います(ただし、気軽にアドバイスを提供してください)。 私の本当の問題:アクティビティが実行されていてサービスが開始されている場合、サービスがアクティビティにメッセージを送信する方法が必要です。この時点での単純な文字列と整数-ほとんどステータスメッセージ。メッセージは定期的には発生しないので、別の方法がある場合、サービスをポーリングするのは良い方法ではないと思います。この通信はユーザーがアクティビティを開始したときにのみ必要です。サービスからアクティビティを開始したくありません。つまり、アクティビティを開始し、サービスが実行されている場合、何か興味深いことが発生すると、アクティビティUIにいくつかのステータスメッセージが表示されます。アクティビティを開始しないと、これらのメッセージは表示されません(それほど興味深いメッセージではありません)。 サービスが実行されているかどうかを判断でき、実行されている場合は、アクティビティをリスナーとして追加できるようです。次に、アクティビティが一時停止または停止したときに、リスナーとしてアクティビティを削除します。それは実際に可能ですか?それを行うために私が理解できる唯一の方法は、アクティビティにParcelableを実装させ、AIDLファイルを作成して、サービスのリモートインターフェイスを介して渡すことができるようにすることです。それはやり過ぎのようですが、ActivityがどのようにwriteToParcel()/ readFromParcel()を実装する必要があるのか​​わかりません。 より簡単な、またはより良い方法はありますか?助けてくれてありがとう。 編集: これに後で興味を持つ人のために、サンプルディレクトリ/apis/app/RemoteService.javaにAIDLを介してこれを処理するためのGoogleのサンプルコードがあります。

23
Android Fatal signal 11(SIGSEGV)at 0x636f7d89(code = 1)。どのように追跡できますか?
私はSIGSEGV、Androidアプリでを取得する理由を追跡することに関する他の投稿を読んでいます。Canvasの使用に関連するNullPointersを探すためにアプリを精査する予定ですが、SIGSEGV毎回異なるメモリアドレスを調べます。プラス私が見てきたcode=1とcode=2。メモリアドレスがだった場合0x00000000、私はそれがNullPointerであるという手掛かりを得るでしょう。 私が手に入れた最後のものはcode=2: A/libc(4969): Fatal signal 11 (SIGSEGV) at 0x42a637d9 (code=2) これを追跡する方法に関する提案はありますか? 私には容疑者がいますが、まだ実験に熱心ではありません。私のアプリは、オフラインマッピングにOSMDroid APIを使用しています。OverlayItemクラスは、マップ上のマーカー/ノードを表します。ネットワークを介してデータを収集し、OverlayItemに入力するサービスがあります。これは、マップに表示されます。デザインを簡略化するために、OverlayItemを自分のNodeOverlayItemクラスに拡張しました。これには、UIアクティビティとサービスで使用する追加の属性がいくつか含まれています。これにより、UIとサービスのアイテム情報が一元化されました。インテントを使用してアクティビティにブロードキャストし、何かが変更されたときにUIマップを更新しました。アクティビティはサービスにバインドし、NodeOverlayItemのリストを取得するためのServiceメソッドがあります。OSMDroid APIのOverlayItemの使用かもしれません。と私のサービスは同時にノード情報を更新します。(同時実行の問題) これを書いていると、それが本当に問題だと思います。頭痛の種は、NodeOverlayItemからNodeとOverlayItemを分けているのではなく、Serviceが保持するのは、アクティビティがノードからのデータを必要とするということです。さらに、アクティビティが作成されるとき(onResumeなど)、OverlayItemオブジェクトは、アクティビティが存在しないときにサービスが維持していたノードデータから再作成する必要があります。たとえば、アプリを起動すると、サービスがデータを収集し、UIがそれを表示し、ホームに戻ってアプリに戻ります。アクティビティは、最新のサービスノードデータからOverlayItemをプルして再作成する必要があります。 これは素晴らしい質問でも明確な質問でもありません。それは私のすべてのSOの質問がニッチまたはあいまいであるようです。誰かがこれらのSIGSEGVエラーを解釈する方法について提案があれば、それは大歓迎です! 更新これ は、デバッグセッション中にキャプチャされた最新のクラッシュです。私はこれらのデバイスのうち3つをテストに使用していますが、開発およびテスト中にすべてが確実にクラッシュするわけではありません。GCのログを記録できるように、少しだけ余分に追加しました。問題はおそらくメモリの枯渇に関連していないことがわかります。 03-03 02:02:38.328: I/CommService(7477): Received packet from: 192.168.1.102 03-03 02:02:38.328: I/CommService(7477): Already processed this packet. It's a re-broadcast from another node, or from myself. It's not a repeat broadcast though. 03-03 02:02:38.406: D/CommService(7477): …

4
権限の拒否:startForegroundにはandroid.permission.FOREGROUND_SERVICEが必要です
最近、次のスタックトレースのいくつかが突然見られました。それはなぜでしょうか?これは、アプリがメディア通知とすべてを使用してオーディオ解説サービスをフォアグラウンドに移動しようとしたときからのものです。 java.lang.SecurityException: Permission Denial: startForeground from pid=1824, uid=10479 requires android.permission.FOREGROUND_SERVICE at android.os.Parcel.createException(Parcel.java:1942) at android.os.Parcel.readException(Parcel.java:1910) at android.os.Parcel.readException(Parcel.java:1860) at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:5198) at android.app.Service.startForeground(Service.java:695) at com.example.app.services.AudioService.setUpMediaNotification(AudioService.java:372) at com.example.app.services.AudioService.setUpAndStartAudioFeed(AudioService.java:328) at com.example.app.services.AudioService.onStartCommand(AudioService.java:228) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3667) at android.app.ActivityThread.access$1600(ActivityThread.java:199) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1681) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) Caused by: android.os.RemoteException: Remote stack …

9
Android –着信SMSメッセージを聞く
着信SMSメッセージを監視するためのアプリケーションを作成し、着信SMS経由でプログラムを起動しようとしています。また、SMSからコンテンツを読み取る必要があります。 ワークフロー: Androidデバイスに送信されたSMS 自己実行可能なアプリケーション SMS情報を読む

6
サービスからのAndroid開始アクティビティ
アンドロイド: public class LocationService extends Service { @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); startActivity(new Intent(this, activity.class)); } } このサービスを Activity ではActivity、条件を満たした場合には、開始 startService(new Intent(WozzonActivity.this, LocationService.class)); LocationService上記の私のから起動できませんでした、サービスクラスActivityで現在実行Activity中のコンテキストを取得するにはどうすればよいですか?


3
エクスポートされたサービスは許可を必要としません:それはどういう意味ですか?
AIDLを介して他のアプリケーションによってバインドされるサービスを作成し、次のようにしてマニフェストに追加します。 <service android:name=".MyService"> <intent-filter> <action android:name="org.example.android.myservicedemo.IService" /> </intent-filter> </service> ここで、IServiceはAIDLインターフェースです。 このように、Eclipseは「エクスポートされたサービスは許可を必要としない」という警告を表示します。を削除するintent-filterと警告は消えますが、アプリケーションは明らかにサービスにバインドできません。 この警告はどういう意味ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.