Android - 드디어 자신의 app 에서 사용 할 서 비 스 를 적 었 습 니 다.
(승차 요청 정보) - 백그라운드 에서 실행 되 며 승차 요청 을 받 을 수 있 도록 설정 되 어 있 고 5KM 이내 의 사용자 에 게 는 "* 사용 자 는 당신 * * 미터 거리 에서 * * 주소 에 접근 하여 * * 목적 지 를 생각 하고 탑승 을 기다 리 고 있 습 니 다. 당신 의 도움 을 받 고 싶 습 니 다!" 라 는 알림 을 받 습 니 다. 알림 은 맨 앞 창 으로 표시 되 어 알림 소 리 를 냅 니 다."승차 요청 정보". 카운트다운 10 초 후 창 이 자동 으로 닫 힙 니 다. 디자인:
우선, 이 서 비 스 는 서버 가 보 낸 요청 메 시 지 를 계속 백 스테이지 에서 실행 하고 Activity 에 보 내야 합 니 다.
그 다음 에 대화 상 자 를 표시 합 니 다. 물론 대화 상 자 는 사용자 의 현재 Activity 를 방해 할 수 없습니다. 여기 서 dialog 를 TYPE SYSTEM ALERT 로 설정 합 니 다.
마지막 으로 카운트다운 10 초 를 표시 합 니 다.
초보 적 으로 실 현 된 Code (서비스 와 의 상호작용 없 음):
사용 권한 추가 필요:
/**
* ShareCarBGService is a service run in background and
* deliver msgs from server to user.
* Attention: build thread for self.
* @author xinyan
* @date 2011-10-23
*/
public class ShareCarBGService extends Service {
public static final String TAG = "ReserveActivity";
public static final int MSG_DIALOG_TIME_COUNT = 0;
public static final int MSG_SHOW_REQUEST_DIALOG = 1;
private static AlertDialog mDialog;
private final String mDialogTitle = " ";
String strRequest = "** ** ** , ** , , !";
private Looper mServiceLooper;
private ServiceHandler mServiceHandler;
private Runnable mDialogRunnable;
private int mTimeCount = 10;
// Handler that receives messages from the thread
private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_DIALOG_TIME_COUNT:
mServiceHandler.postDelayed(mDialogRunnable, 1000);
break;
case MSG_SHOW_REQUEST_DIALOG:
showNewRequestDialog(strRequest);
break;
default:
break;
}
}
}
@Override
public void onCreate() {
super.onCreate();
// Start up the thread running the service. Note that we create a
// separate thread because the service normally runs in the process's
// main thread, which we don't want to block. We also make it
// background priority so CPU-intensive work will not disrupt our UI.
HandlerThread thread = new HandlerThread("ServiceStartArguments",
Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
// Get theHandlerThread's Looper and use it for our Handler
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
Log.v(TAG, "service started.");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// For each start request, send a message to start a job and deliver the
// start ID so we know which request we're stopping when we finish the
// job
Message msg = mServiceHandler.obtainMessage();
msg.arg1 = startId;
msg.what = MSG_SHOW_REQUEST_DIALOG;
mServiceHandler.sendMessageDelayed(msg, 5000);
mDialogRunnable = new Runnable() {
@Override
public void run() {
if (mTimeCount > 0) {
mDialog.setTitle(mDialogTitle + "(" + mTimeCount + ")");
mTimeCount--;
mServiceHandler.postDelayed(mDialogRunnable, 1000);
} else { // 10s later, dismiss the request msg dialog.
mDialog.dismiss();
}
}
};
Log.v(TAG, "onStartCommand");
// If we get killed, after returning from here, restart
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.v(TAG, "service destroyed.");
}
/**
* show a msg dialog when a new pickride request received.
* @param request the content of request
*/
public void showNewRequestDialog(String request) {
// i don't know whether a static dialog can use as this.
if (null == mDialog) {
mDialog = new AlertDialog.Builder(this).create();
mDialog.setTitle(mDialogTitle);
mDialog.setMessage(request);
// This the point, this dialog won't block the user's current
// activity
// via this attr
mDialog.getWindow().setType(
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
mDialog.setButton(DialogInterface.BUTTON_NEGATIVE, " ",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
mDialog.setButton(DialogInterface.BUTTON_POSITIVE, " ",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Bundle bundle = new Bundle();
Intent intent = new Intent();
intent.setClass(ShareCarBGService.this,
ReserveRequestListTabWidgetActivity.class);
startActivity(intent);
}
});
} else {
mDialog.setMessage(request);
}
mDialog.show();
mServiceHandler.sendEmptyMessage(MSG_DIALOG_TIME_COUNT);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception in thread main java.lang. NoClassDefFoundError 오류 해결 방법즉,/home/hadoop/jarfile) 시스템은 Hello World 패키지 아래의class라는 클래스 파일을 실행하고 있다고 오인하여 시스템의 CLASSPATH 아래 (일반적으로 현재 디렉터리를 포함) Hell...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.