2011-12-02 34 views
16

Tôi biết, tôi không phải là người đầu tiên có vấn đề này, nhưng tôi đã thử rất nhiều giải pháp, tôi đã tìm thấy và không có ai hoạt động ... có thể bạn đã tìm thấy lỗiAndroid: không thể bắt đầu ý định dịch vụ: không tìm thấy?

Lỗi (cũng xảy ra mà không có. lớp và với /.Client tùy thuộc vào các thiết lập khác)

12-02 16: 40: 15,359: W/ActivityManager (74): Không thể bắt đầu dịch vụ Ý định {hành động = com.android.fh.EnOceanApp. Client.class}: không tìm thấy

Trong tệp kê khai, điều này được bao gồm trong ứng dụng, ngoài hoạt động (Thử nó cũng vào các hoạt động và với ".Client"

Các mã trong onCreate()

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

hoặc

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

hoặc

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

hoặc

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

Và bây giờ, tôi không có một ý tưởng nữa .... com.android.fh.EnOceanApp là gói, Client.java các lớp dịch vụ trong gói này

và manifest Tôi quên:

<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> 
+1

bài biểu hiện của bạn. –

+0

Khai báo Dịch vụ của bạn trong tệp kê khai – njzk2

Trả lời

2

Vì vậy .. chỉ để cuối cùng giúp đỡ người khác hay không:

tôi đã thực hiện một dự án mới, sao chép các nguồn khác nhau và cố gắng chạy nó: dịch vụ đã được tìm thấy ngay bây giờ. Sự khác biệt là gì, hay nói cách khác: tôi nghĩ gì, có thể gây ra vấn đề: tên gói dài hoặc bắt đầu bằng com.android. .. Trong dự án mới, tôi chỉ chọn com.enocean

4

Đôi khi bạn sẽ cần phải đủ điều kiện cho tên lớp của mình trong tệp kê khai, thay vì sử dụng shortform (.classname). Tôi đã thấy rằng khi tôi sử dụng các lớp học từ một gói khác nhau, nhưng có lẽ nó sẽ giúp ở đây vì mục đích dịch vụ có thể đi ra ngoài của ứng dụng.

+0

Điều này không thay đổi bất kỳ điều gì cho đến thời điểm này: ( – nico

+0

Đã giúp tôi. Tôi đã có dịch vụ của mình trong gói khác với hoạt động chính của mình – Tirtha

+0

com.andorid. * Bị giới hạn trên Playstore (Chỉ cần FYI) – scottyab

21

Nhờ người dùng njzk2 để cho tôi biết điều gì đang xảy ra.

Tôi đã gặp sự cố tương tự. Có vẻ như hệ điều hành Android không thể tìm thấy lớp dịch vụ mà bạn đã yêu cầu nếu bạn chưa đăng ký trước đó trong tệp kê khai của proyect của bạn.

Hãy nhớ rằng dịch vụ giống như một hoạt động nhưng không có giao diện đồ họa. Nó có nghĩa là các dịch vụ cần phải được đăng ký trước khi bạn có thể sử dụng chúng

này là làm thế nào bạn đăng ký dịch vụ trong dự án Android của bạn:

<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> 

Chỉ cần nhớ rằng YourService lớp cần phải mở rộng từ dịch vụ, nếu không muốn nói lớp học của bạn sẽ không phải là một dịch vụ.

public class YourService extends Service{} 
+3

Đã xảy ra sự cố tương tự và nhận thấy rằng nếu tôi đóng thẻ bằng "/>", nó không phát hiện được dịch vụ sau khi nâng cấp ứng dụng, nhưng nếu tôi đóng bằng "" thì phát hiện sau khi nâng cấp ứng dụng. Weeiird. – Danail

+0

@Danail Cảm ơn đã giải quyết vấn đề cho tôi! :-) – Ostkontentitan

+0

@Konstantin, nghĩ rằng bạn chỉ cần xóa toàn bộ dự án. Đó là vấn đề đối với tôi. – Danail

0

Tôi đã tạo sai lầm ngớ ngẩn khi thêm thẻ vào một tệp riêng biệt trong tệp kê khai.

Trong trường hợp đó, ứng dụng hiện tại không thể tìm thấy dịch vụ được xác định.

Hy vọng bạn bỏ qua lỗi đó :)

Cảm ơn.

1

Mặc dù TẤT CẢ các câu trả lời trong bài đăng này và nhiều liên quan Unable to start service Intent: not foundUnable to start Service Intent, tôi vẫn gặp khó khăn và phải mất một thời gian để tôi thực hiện việc này. Kịch bản của tôi hơi phức tạp hơn một chút vì tôi đang cố bắt đầu một dịch vụ trong một ứng dụng KHÁC BIỆT mà tôi đang gọi nó. Tôi đã tìm ra và đây là TẤT CẢ các chi tiết, cùng với một số mã tiền thưởng.

MainActivity gọi ý định (hoặc bất cứ nơi nào)

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); 

Manifest: dịch vụ (thẻ dịch vụ bên trong thẻ Application) Đó là

<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 
      } 
     } 
    } 
} 

Ghi chú

  • dịch vụ không cần phải được bắt đầu, ý định này sẽ bắt đầu nó
  • "com.example.core.MusicService1234" và "com.example.core.MusicService.TOGGLE_PLAYBACK" có thể là bất cứ điều gì bạn muốn nó được, nhưng rõ ràng là cần phải phù hợp với bộ lọc ý định trong bản kê dịch vụ với mục đích gọi điện. Bạn có thể đặt nhiều hành động này để bạn có thể thực hiện các tác vụ khác nhau khi dịch vụ của bạn bắt đầu tùy thuộc vào giá trị từ mục đích của bạn
  • 99 có thể là bất cứ thứ gì bạn muốn, nhưng phải là duy nhất nếu bạn đang sử dụng thông báo
  • Tôi không chắc chắn nó có thể gọi một dịch vụ trong một ứng dụng khác (như thế này) mà không sử dụng bộ lọc ý định - nếu có, ai đó hãy khai sáng chúng tôi. Tôi đã thử và nó không hoạt động.

tín dụng đối với: các thông tin tích lũy từ tất cả các bài viết :)

+0

câu trả lời này có vẻ thú vị nhưng không có quá nhiều mã để thử giải pháp được cung cấp – Lisitso

0

Đó là sai lầm ngớ ngẩn của android

này sẽ không hoạt

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

Nhưng điều này sẽ làm việc, có riêng thẻ đóng

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

Vâng, trong trường hợp của tôi, tôi phải dọn dẹp dự án. Nó đôi khi xảy ra khi bạn đã tạo một lớp Java mới cho dịch vụ trong gói/dự án của bạn nhưng không xây dựng/làm sạch các dự án sau. Trong trường hợp của tôi, tôi chỉ cần làm sạch dự án để loại bỏ lỗi.

0

Nếu có ai thấy điều này và có cùng một vấn đề mà tôi đã làm, đó là vì tôi đi theo một hướng dẫn sử dụng và context.startService() thay vì context.startActivity()

Các vấn đề liên quan