2012-03-07 46 views
8

Tôi gặp lỗi trong ứng dụng android khi nó cố khởi tạo bộ thu mà tôi sử dụng để khởi động dịch vụ khi khởi động. Lỗi là hiển nhiên, nó không thể tìm thấy tệp lớp của người nhận của tôi. Nhưng mọi thứ đều ổn với tệp kê khai của tôi, các gói và tất cả và tôi không biết đầu mối gì đang xảy ra. Đây là mã của tôi:Không thể khởi tạo bộ nhận java.lang.ClassNotFoundException

package dti.obd.reader; 

import dti.obd.reader.service.MainService; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class BootReceiver extends BroadcastReceiver 
{ 
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      Intent serviceIntent = new Intent(MainService.class.getName()); 
      context.startService(serviceIntent); 
     } 
} 

Và file manifest của tôi:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="dti.obd.reader" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="8" /> 


    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 

     <service android:name=".service.MainService" > 
      <intent-filter > 
       <action android:name="dti.obd.reader.service.MainService" /> 
      </intent-filter> 
     </service> 

     <receiver android:name="dti.obd.reader.BootReceiver" > 
      <intent-filter > 
       <action android:name="android.intent.action.BOOT_COMPLETED" > 
       </action> 
      </intent-filter> 
     </receiver> 
    </application> 

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

</manifest> 

Có ai biết các Erro? Dường như gói và tên tất cả đều ok ...

Trả lời

16

Bạn phải đặt Reciever của bạn trong một số package. Hệ thống sẽ không thể khởi tạo nếu nó nằm trên gói chính.

Tôi gặp vấn đề tương tự. May mắn thay trước khi tìm kiếm lỗi trên internet tôi đã làm một dự án java khác. Tôi chỉ nhận ra rằng con bọ ở đó giống như cái này. Đã thử nó ngay bây giờ và làm việc. :)

+0

cảm ơn! Làm việc tốt, ans này nên được chấp nhận +1 cho bạn –

+7

Bạn có thể giải thích nó nhiều hơn một chút? – levi

1

thử:

<receiver android:name=".BootReceiver" > 

Nó cho biết thêm tên gói bản thân vì bạn đã định nghĩa:

package="dti.obd.reader" 
+0

Tôi đã cố gắng theo cách này. Đó là lý do tại sao tôi thay đổi để especify một lần nữa gói ... nhưng không ai trong số họ làm việc. Cảm ơn bạn đã giúp đỡ! –

+1

Bạn cần chỉ rõ gói 'AND' viết dòng' người nhận 'theo cách này. Cả hai bạn có cùng một lúc không? Ngoài ra, hãy xem http://www.coderanch.com/t/439875/Android/Mobile/make-your-application-run-as có thể bạn có thể phát hiện ra điều gì đó khác biệt. (Điều này có thể không tạo ra bất kỳ sự khác biệt nào) nhưng đặt dòng 'cho phép người dùng' phía trên dòng' ứng dụng'. – Caner

+0

Tôi đã thử mọi thứ, nhưng không có gì hiệu quả. Tôi nhận được hoàn toàn điên về lỗi này. Tôi nghĩ rằng cái gì đó của nó với tên của gói, một số hạn chế mà tôi không biết ... –

1

Tôi cũng phải đối mặt với vấn đề này. Thêm tên gói đầy đủ vào định nghĩa người nhận trong tệp kê khai không giúp được gì. Vấn đề là có một tập tin odex cũ tương ứng với tập tin apk của tôi. Hệ thống Android tải các lớp từ tệp odex nên không thể tìm thấy lớp người nhận.

Cách giải quyết:

  • Hủy bỏ các tập tin Odex cũ, hoặc
  • tặng một tên mới để apk của bạn

http://www.addictivetips.com/mobile/what-is-odex-and-deodex-in-android-complete-guide/

+1

Tôi phải đối mặt với cùng một vấn đề. phiên bản trước, tôi sử dụng tên người nhận A, Trong phiên bản hiện tại, tôi đã xóa nó, sau đó nhận được lỗi này – Jonguo

+0

Chúng tôi đã có ngoại lệ này trong ứng dụng của chúng tôi trực tuyến. – Cobain

0

Bạn phải đặt reciever bạn trong một số gói Thay vào đó, hãy thêm đường dẫn đầy đủ của Nhận r

<receiver android:name="com.yourpackage.BootReceiver" > 

Nó Âm thanh Weired nhưng trong trường hợp của tôi nó giải quyết Vấn đề

hy vọng ai đó sẽ hiệu quả với kinh nghiệm này

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