คำถามติดแท็ก android-service

บริการเป็นส่วนประกอบของแอปพลิเคชันที่แสดงถึงความต้องการของแอปพลิเคชันในการดำเนินการที่ทำงานได้นานขึ้นในขณะที่ไม่ได้โต้ตอบกับผู้ใช้หรือเพื่อจัดหาฟังก์ชันการทำงานให้แอปพลิเคชันอื่นใช้

30
จะตรวจสอบว่าบริการทำงานบน Android ได้อย่างไร?
ฉันจะตรวจสอบว่าบริการพื้นหลังทำงานอยู่ได้อย่างไร? ฉันต้องการกิจกรรม Android ที่สลับสถานะของบริการ - ให้ฉันเปิดใช้งานถ้ามันถูกปิดและปิดถ้ามันเปิดอยู่

11
บริการเทียบกับ IntentService ในแพลตฟอร์ม Android
ฉันกำลังค้นหาตัวอย่างของสิ่งที่สามารถทำได้ด้วยสิ่งIntentServiceที่ไม่สามารถทำได้ด้วยService(และในทางกลับกัน) ฉันยังเชื่อว่าการIntentServiceวิ่งในเธรดอื่นและ a Serviceไม่ IntentServiceดังนั้นเท่าที่ผมสามารถมองเห็นเริ่มบริการภายในด้ายของตัวเองเป็นเหมือนการเริ่มต้น ถูกต้องไหม

9
ตัวอย่าง: การสื่อสารระหว่างกิจกรรมและบริการโดยใช้การส่งข้อความ
ฉันไม่พบตัวอย่างวิธีส่งข้อความระหว่างกิจกรรมและบริการและฉันใช้เวลานานเกินกว่าที่จะหาสิ่งนี้ได้ นี่คือตัวอย่างโครงการสำหรับผู้อื่นเพื่ออ้างอิง ตัวอย่างนี้ช่วยให้คุณสามารถเริ่มหรือหยุดบริการได้โดยตรงและแยกผูก / แยกออกจากบริการ เมื่อบริการกำลังทำงานอยู่จะเพิ่มจำนวนที่ 10 Hz หากกิจกรรมถูกผูกไว้กับกิจกรรมServiceจะแสดงค่าปัจจุบัน ข้อมูลถูกถ่ายโอนเป็นจำนวนเต็มและเป็นสตริงเพื่อให้คุณสามารถดูวิธีการทำสองวิธีที่แตกต่างกัน นอกจากนี้ยังมีปุ่มในกิจกรรมเพื่อส่งข้อความไปยังบริการ (เปลี่ยนค่าที่เพิ่มขึ้นตามลำดับ) ภาพหน้าจอ: 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 \ ค่า \ strings.xml: <?xml …

4
getApplication () กับ getApplicationContext ()
ฉันไม่สามารถหาคำตอบที่น่าพอใจได้ดังนั้นเราไปที่: จัดการกับอะไรActivity/Service.getApplication()และContext.getApplicationContext()? ในแอปพลิเคชันของเราทั้งคู่จะส่งคืนวัตถุเดียวกัน ActivityTestCaseอย่างไรก็ตามในการเยาะเย้ยแอปพลิเคชันจะgetApplication()กลับมาพร้อมกับการเยาะเย้ย แต่getApplicationContextจะยังคงกลับตัวอย่างบริบทที่แตกต่างกัน (หนึ่งฉีดโดย Android) นั่นเป็นข้อบกพร่องหรือไม่? มันตั้งใจหรือไม่ ฉันไม่เข้าใจความแตกต่างตั้งแต่แรก มีกรณีนอกชุดทดสอบที่การโทรทั้งสองอาจกลับมาพร้อมกับวัตถุที่แตกต่างกันหรือไม่? เมื่อใดและเพราะเหตุใด ยิ่งไปกว่านั้นคือเหตุผลที่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 idle procs: 1 seq (0,0 , 0)} ตามที่ฉันเข้าใจแล้วว่าเกี่ยวข้องกับ: ขีด จำกัด การดำเนินการพื้นหลัง ตอนนี้เมธอด startService () จะส่ง IllegalStateException หากแอปที่กำหนดเป้าหมาย Android 8.0 พยายามใช้วิธีการนั้นในสถานการณ์ที่ไม่ได้รับอนุญาตให้สร้างบริการพื้นหลัง " ในสถานการณ์ที่ไม่ได้รับอนุญาต " - ความหมายคืออะไร? และวิธีการแก้ไข …

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แต่ฉันไม่จำเป็นต้อง app Manifestของฉันเสมอได้รับข้อมูลนี้ดังนั้นฉันไม่ได้ใส่ไว้ใน แต่ผมไม่สามารถมีตัวรับสัญญาณการออกอากาศจะถูกฆ่าโดย GC Serviceเมื่อฉันต้องใช้ข้อมูลนี้ดังนั้นฉันลงทะเบียนรับการออกอากาศใน ดังนั้นฉันต้องการที่จะต่อการเรียกร้องContext registerReceiver()เมื่อฉันไม่ต้องการACTION_PHONE_STATE_CHANGEDฉันจะยกเลิกการลงทะเบียน เคล็ดลับใด ๆ

3
START_STICKY และ START_NOT_STICKY
ความแตกต่างระหว่างSTART_STICKYและSTART_NOT_STICKYในขณะที่การใช้บริการใน Android คืออะไร? ใครช่วยชี้ให้เห็นตัวอย่างมาตรฐาน ..

13
วิธีการให้บริการ Android สื่อสารกับกิจกรรม
ฉันกำลังเขียนแอปพลิเคชัน Android เครื่องแรกของฉันและพยายามทำให้การสื่อสารระหว่างบริการและกิจกรรมเป็นไปอย่างราบรื่น ฉันมีบริการที่จะทำงานในพื้นหลังและทำการบันทึกผ่าน gps และเวลา ฉันจะมีกิจกรรมที่จะใช้ในการเริ่มและหยุดบริการ ดังนั้นก่อนอื่นฉันต้องสามารถทราบได้ว่าบริการกำลังทำงานอยู่หรือไม่เมื่อเริ่มกิจกรรม มีคำถามอื่น ๆ เกี่ยวกับที่นี่ดังนั้นฉันคิดว่าฉันสามารถหาได้ (แต่อย่าลังเลที่จะให้คำแนะนำ) ปัญหาที่แท้จริงของฉัน: หากกิจกรรมกำลังทำงานอยู่และบริการเริ่มต้นขึ้นฉันต้องการวิธีที่บริการในการส่งข้อความไปยังกิจกรรม Simple Strings และ integers ณ จุดนี้ - ข้อความสถานะส่วนใหญ่ ข้อความจะไม่เกิดขึ้นเป็นประจำดังนั้นฉันจึงไม่คิดว่าการให้บริการเป็นวิธีที่ดีในการไปหากมีวิธีอื่น ฉันต้องการการสื่อสารนี้เฉพาะเมื่อผู้ใช้เริ่มต้นกิจกรรม - ฉันไม่ต้องการเริ่มกิจกรรมจากบริการ กล่าวอีกนัยหนึ่งถ้าคุณเริ่มกิจกรรมและบริการกำลังทำงานคุณจะเห็นข้อความสถานะใน UI กิจกรรมเมื่อสิ่งที่น่าสนใจเกิดขึ้น หากคุณไม่เริ่มกิจกรรมคุณจะไม่เห็นข้อความเหล่านี้ (ไม่น่าสนใจ) ดูเหมือนว่าฉันควรจะสามารถตรวจสอบว่าบริการกำลังทำงานอยู่หรือไม่และถ้าเป็นเช่นนั้นให้เพิ่มกิจกรรมเป็นผู้ฟัง จากนั้นลบกิจกรรมเป็นผู้ฟังเมื่อกิจกรรมหยุดชั่วคราวหรือหยุด เป็นไปได้จริงเหรอ? วิธีเดียวที่ฉันสามารถคิดได้ว่าจะให้กิจกรรมใช้ Parcelable และสร้างไฟล์ AIDL เพื่อให้ฉันสามารถส่งผ่านอินเทอร์เฟซระยะไกลของบริการได้ แม้ว่าจะดูเหมือน overkill และฉันก็ไม่รู้ว่า Activity ควรใช้ writeToParcel () / readFromParcel () อย่างไร …

23
สัญญาณ Android ร้ายแรง 11 (SIGSEGV) ที่ 0x636f7d89 (รหัส = 1) จะติดตามได้อย่างไร?
ฉันได้อ่านโพสต์อื่น ๆ เกี่ยวกับการติดตามเหตุผลในการรับSIGSEGVแอพ Android ฉันวางแผนที่จะทำให้แอพของฉันเป็นไปได้สำหรับ NullPointers ที่เกี่ยวข้องกับการใช้งาน Canvas แต่SIGSEGVbarfs ของฉันใช้ที่อยู่หน่วยความจำที่แตกต่างกันในแต่ละครั้ง พลัสผมเคยเห็นและ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 และบริการ ฉันใช้ Intents เพื่อออกอากาศไปยังกิจกรรมเพื่อรีเฟรชแผนที่ …

5
การปฏิเสธสิทธิ์: 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 …

9
Android - ฟังข้อความ SMS ที่เข้ามา
ฉันพยายามสร้างแอพพลิเคชั่นสำหรับตรวจสอบข้อความ SMS ที่เข้ามาและเปิดโปรแกรมผ่านทาง SMS ขาเข้าและควรอ่านเนื้อหาจาก SMS ขั้นตอนการทำงาน: ส่ง SMS ไปยังอุปกรณ์ Android แอพลิเคชันปฏิบัติการด้วยตนเอง อ่านข้อมูล SMS

6
Android เริ่มกิจกรรมจากบริการ
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ในปัจจุบันในระดับบริการได้อย่างไร

6
ข้อแตกต่างระหว่าง Service, Async Task & Thread หรือไม่?
อะไรคือความแตกต่างระหว่าง Service, Async Task & Thread หากฉันไม่ผิดพวกเขาทั้งหมดจะใช้ทำบางสิ่งในพื้นหลัง ดังนั้นวิธีการตัดสินใจที่จะใช้และเมื่อใด

3
บริการที่ส่งออกไม่ต้องการการอนุญาต: หมายความว่าอย่างไร
ฉันสร้างบริการที่ถูกผูกไว้โดยแอปพลิเคชันอื่นผ่าน AIDL และฉันเพิ่มลงในรายการดังต่อไปนี้: <service android:name=".MyService"> <intent-filter> <action android:name="org.example.android.myservicedemo.IService" /> </intent-filter> </service> โดยที่ IService เป็นอินเตอร์เฟส AIDL วิธีนี้ทำให้เกิดคราสแสดงให้ฉันเตือนบริการส่งออกไม่จำเป็นต้องได้รับอนุญาต หากฉันลบintent-filterคำเตือนจะหายไป แต่แน่นอนว่าแอปพลิเคชันไม่สามารถผูกกับบริการได้ คำเตือนนี้หมายความว่าอย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.