[英]Class init failed in newInstance call : for IntentService called from alarmManager
我正在嘗試將IntentService與AlarmManager一起使用以安排警報。 我使用了BroadCast Reciever,它在下面的代碼中進一步調用了我的IntentService:
設置警報:
public static Integer createScheduledAlarm(Calendar calendar,
int intervalSeconds, Context context) {
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
int id = (int) System.currentTimeMillis();
Intent intent = new Intent(context,
com.stressfree.alerts.TimeAlarm.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, id,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
if (intervalSeconds > 0) {
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), intervalSeconds * 1000,
pendingIntent);
}
return id;
}
這是我的BroadCast接收器課程:
public class TimeAlarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Bundle bundle = intent.getExtras();
Intent taskService = new Intent(context, TaskService.class);
//taskService.putExtras(bundle);
context.startService(taskService);
}
}
最后,我在下面的IntentService類中獲取了用戶的當前位置:
public class TaskService extends IntentService implements
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener{
public TaskService() {
super("TaskService");
}
private LocationClient locationclient;
private Location mCurrentLocation;
private Context mContext;
@Override
protected void onHandleIntent(Intent intent) {
Log.e("Service", "Inside onHandleIntent");
mContext = this;
int resp = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (resp == ConnectionResult.SUCCESS) {
locationclient = new LocationClient(this, this, this);
locationclient.connect();
}
}
@Override
public void onConnectionFailed(ConnectionResult arg0) {
// TODO Auto-generated method stub
}
@Override
public void onConnected(Bundle arg0) {
mCurrentLocation = locationclient.getLastLocation();
//Do some stuff
}
@Override
public void onDisconnected() {
// TODO Auto-generated method stub
}
在清單中,我已將接收者和服務注冊為:
<receiver android:name=".TimeAlarm" />
<service android:name=".services.TaskService" >
但是現在,當警報在設定的時間觸發時,它並沒有到達BroadCast接收器的onReceive的斷點。 而且我收到IntentService錯誤。 這是錯誤日志:
06-26 11:22:20.068: W/dalvikvm(4070): VFY: register1 v2 type 17, wanted 18
06-26 11:22:20.068: W/dalvikvm(4070): VFY: rejecting opcode 0x2e at 0x005c
06-26 11:22:20.073: W/dalvikvm(4070): VFY: rejected Lcom/stressfree/services/TaskService;.onConnected (Landroid/os/Bundle;)V
06-26 11:22:20.073: W/dalvikvm(4070): Verifier rejected class Lcom/stressfree/services/TaskService;
06-26 11:22:20.073: W/dalvikvm(4070): Class init failed in newInstance call (Lcom/stressfree/services/TaskService;)
06-26 11:22:20.073: D/AndroidRuntime(4070): Shutting down VM
06-26 11:22:20.078: W/dalvikvm(4070): threadid=1: thread exiting with uncaught exception (group=0x40c321f8)
06-26 11:22:20.088: E/AndroidRuntime(4070): FATAL EXCEPTION: main
06-26 11:22:20.088: E/AndroidRuntime(4070): java.lang.VerifyError: com/stressfree/services/TaskService
06-26 11:22:20.088: E/AndroidRuntime(4070): at java.lang.Class.newInstanceImpl(Native Method)
06-26 11:22:20.088: E/AndroidRuntime(4070): at java.lang.Class.newInstance(Class.java:1319)
06-26 11:22:20.088: E/AndroidRuntime(4070): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2246)
06-26 11:22:20.088: E/AndroidRuntime(4070): at android.app.ActivityThread.access$1600(ActivityThread.java:127)
06-26 11:22:20.088: E/AndroidRuntime(4070): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1213)
06-26 11:22:20.088: E/AndroidRuntime(4070): at android.os.Handler.dispatchMessage(Handler.java:99)
06-26 11:22:20.088: E/AndroidRuntime(4070): at android.os.Looper.loop(Looper.java:137)
06-26 11:22:20.088: E/AndroidRuntime(4070): at android.app.ActivityThread.main(ActivityThread.java:4507)
06-26 11:22:20.088: E/AndroidRuntime(4070): at java.lang.reflect.Method.invokeNative(Native Method)
06-26 11:22:20.088: E/AndroidRuntime(4070): at java.lang.reflect.Method.invoke(Method.java:511)
06-26 11:22:20.088: E/AndroidRuntime(4070): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
06-26 11:22:20.088: E/AndroidRuntime(4070): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
06-26 11:22:20.088: E/AndroidRuntime(4070): at dalvik.system.NativeStart.main(Native Method)
嘗試向您的服務中添加另一個接受String參數'name'的構造函數,並將其傳遞給super的構造函數
問題出在我的IntentService內部的onConnected方法中。 OnConnected方法中存在一些運行時錯誤,導致IntentService無法啟動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.