Android 广播接收机中的错误
我的申请有错误。。。 活动中的代码Android 广播接收机中的错误,android,Android,我的申请有错误。。。 活动中的代码 SharedPreferences settings = getPreferences(Context.MODE_PRIVATE); String nastrPreferences = settings.getString(PREF_ACCOUNT_NAME, null); startService(new Intent(this, ServiceUpdate.class).putExtra("preferences", nas
SharedPreferences settings = getPreferences(Context.MODE_PRIVATE);
String nastrPreferences = settings.getString(PREF_ACCOUNT_NAME, null);
startService(new Intent(this, ServiceUpdate.class).putExtra("preferences", nastrPreferences));
在活动中,我运行我的服务。我输入了意向“偏好”
在服务中,我获得“首选项”并输入意图,然后在广播接收器中传输
服务更新
package com.example.ok1;
import...
public class ServiceUpdate extends Service {
final String Tag="States";
//*******************Google*********************
private static final Level LOGGING_LEVEL = Level.OFF;
com.google.api.services.tasks.Tasks client;
private static final String PREF_ACCOUNT_NAME = "accountName";
static final String TAG = "TasksSample";
static final int REQUEST_GOOGLE_PLAY_SERVICES = 0;
static final int REQUEST_AUTHORIZATION = 1;
static final int REQUEST_ACCOUNT_PICKER = 2;
final HttpTransport transport = AndroidHttp.newCompatibleTransport();
final JsonFactory jsonFactory = new GsonFactory();
GoogleAccountCredential credential;
List<String> tasksList;
List<String> tasksList_Note;
List<String> result_Date;
final String ATTRIBUTE_TITLE_TEXT="title";
final String ATTRIBUTE_NOTE_TEXT="note";
final String ATTRIBUTE_DATE_TEXT="date";
static String preferences;
DBHelper dbHelper;
static com.google.api.services.tasks.Tasks service;
int numAsyncTasks;
//***********************************************8
public static final int INTERVAL = 100000; // 10 sec
public static final int FIRST_RUN = 5000; // 5 seconds
int REQUEST_CODE = 11223344;
AlarmManager alarmManager;
@Override
public void onCreate() {
// TODO: действия, которые будут выполняться при создании сервиса
Log.d(Tag, "onStartCommand");
}
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(Tag, "onCreate");
someTask();
return START_REDELIVER_INTENT;
}
public void onDestroy() {
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Привязка сервиса
return null;
}
void someTask() {
//************перезапускать сервис буду тут************
Intent intent = new Intent(this, RepeatingAlarmService.class);
intent.putExtra("preferences", preferences);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, REQUEST_CODE, intent, 0);
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
if (alarmManager != null) {
alarmManager.cancel(PendingIntent.getBroadcast(this, REQUEST_CODE, intent, 0));
}
Toast.makeText(this, "Service Stopped!", Toast.LENGTH_LONG).show();
Log.d(Tag, "Service onDestroy(). Stop AlarmManager at " + new java.sql.Timestamp(System.currentTimeMillis()).toString());
alarmManager.setRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + FIRST_RUN,
INTERVAL,
pendingIntent);
Toast.makeText(this, "Service Started.", Toast.LENGTH_LONG).show();
Log.v(this.getClass().getName(), "AlarmManger started at " + new java.sql.Timestamp(System.currentTimeMillis()).toString());
}
我得到preferences=null。意图没有“偏好”。为什么?我不正确的地方是什么?
日志
当您获得PendingEvent时,分配一个唯一的请求代码:
PendingIntent.getBroadcast(context, REQUEST_CODE , showIntent, 0);
这样,您就可以向系统注册不同/唯一的意图实例
请求_代码是唯一的,您应该在当前系统时间输入它
int REQUEST_CODE = (int) System.currentTimeMillis();
您忘记为
ServiceUpdate
中的首选项字符串赋值。在调用someTask()
方法之前,您需要在服务的onStartCommand
方法中从Intent获取值:
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(Tag, "onCreate");
preferences= intent.getStringExtra("preferences"); //<<<<
someTask();
return START_REDELIVER_INTENT;
}
public int-onstart命令(Intent-Intent、int-flags、int-startId){
Log.d(标记为“onCreate”);
preferences=intent.getStringExtra(“preferences”);//我尝试了“preferences=null”get error“从主线程调用此函数可能导致死锁和/或ANR”,在code
List tasks=service.tasks().List(@default”).execute().getItems()行中code
@ejdhddejdd:那么您还有其他问题,请显示logcat结果以获取更多信息help@ejdhddejdhdd:我认为List tasks=service.tasks().List(@default”).execute().getItems()
您正试图执行Asyctask?这就是为什么会出现错误,所以请使用服务或线程来执行您希望在Asyctask中执行的任务
PendingIntent.getBroadcast(context, REQUEST_CODE , showIntent, 0);
int REQUEST_CODE = (int) System.currentTimeMillis();
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(Tag, "onCreate");
preferences= intent.getStringExtra("preferences"); //<<<<
someTask();
return START_REDELIVER_INTENT;
}