2011-02-17 5 views
0

모든 활동과 애플리케이션 설정 옵션 및 몇 가지 사용자 선택이 포함 된 매우 간단한 화면을 포함하는 애플리케이션이 있습니다. 주 화면 버튼은 다른 활동을 시작합니다.블루투스 연결을 새 활동에 전달합니다.

(1) 이제 응용 프로그램에 블루투스 스캐너를 구현 중이며 기본 설정에서 설정을 편집하고 블루투스 연결을 설정하고 해당 연결을 번들 또는 분할 가능을 통해 전달할 수 있기를 원합니다. 다른 활동들.

연결을 전달하는 방법으로 번들을 조회했지만 기본 유형과 기본 유형 만 값으로 받아 들여야합니다. Intent.putExtra (String, Parcelable)를 사용할 수 있지만 Parcel 일종의 나를 혼란스럽게 보았습니다. 이것을 구현하는 가장 좋은 방법은 무엇이겠습니까? 아니면 심지어 가능합니까?

몇 가지 관련 코드 :

//subclass definitions for the Runnables which start the applications in their own threads 
private final Handler smsHandler = new Handler(); 
private final Handler smsOutHandler = new Handler(); 

private final Runnable smsIntentRunnable = new Runnable() { 
    public void run() { 
     Intent smsIntent = new Intent(smsMobile.this, smsActivity.class); 
     startActivity(smsIntent); 
    } 
}; 

private final Runnable smsOutIntentRunnable = new Runnable() { 
    public void run() { 
     Intent smsOutIntent = new Intent(smsMobile.this, smsOutActivity.class); 
     startActivity(smsOutIntent); 
    } 
}; 

//button listeners located in onCreate(), which start the Activities 
newTicket.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     smsHandler.post(smsIntentRunnable); 
    } 
}); 

updateTicket.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     smsOutHandler.post(smsOutIntentRunnable); 
    } 
}); 

(2) 나는 또한 데이터베이스 연결을 통과 할 수 있을까요? 나는 SQLiteOpenHelper가 IPC를 복잡하게 할 수있는 서브 클래스 화되어야한다는 것을 알고 있지만 어떻게 든 가능할 수 있다고 생각 했는가?

답변

0

share data between activities and services에는 몇 가지 옵션이 있습니다.

업데이트 : 코드는 별도의 프로세스에서 실행하는 경우

당신은 IPC/Parcelable이 필요합니다는 상황에 조금 확장합니다. 당신은 별도의 프로세스에서 코드를 실행하기 위해 매니페스트에 지정해야합니다 : 당신은 단순히/주이 데이터를 저장하는 사용자 정의 응용 프로그램 클래스를 사용할 수 있습니다 귀하의 경우 http://developer.android.com/guide/topics/fundamentals.html#procthread

  1. 내가 당신에게 동일한 프로세스에서 실행 활동을 asume. 다른 스레드에서 액세스하는 경우 synchronized인지 확인하십시오. 또는 첫 번째 링크에 나열된 다른 방법을 사용할 수도 있습니다.

  2. 당연히 하나의 자바 응용 프로그램이므로 동일한 프로세스 내에서 데이터베이스 연결을 전달할 수 있습니다. 그러나 모든 classes need to implement Parcelable in order to pass via IPC과 AFAIK, SQLiteDatabase는 parcelable (네이티브 함수와 이야기하는 클래스는 일반적으로 수행하지 않음)을 구현하지 않기 때문에 프로세스간에 IPC를 통해 전달할 수는 없습니다.

+0

이 FAQ에서 유용한 것은 단지 클래스를 글로벌 죄수에 저장하는 android.app.Application 클래스에 대한 참조입니다. 본문. 실제적인 예가 없으며 정보가 모호합니다. – moonlightcheese

+0

귀하의 상황을 해결하기 위해 게시물을 업데이트했습니다. –

+0

업데이 트가 많은 도움이되고 내 길을 찾을 수 있어야합니다. 내가 전역에서 믹스를 유지하기 위해 사용자 지정 응용 프로그램 클래스를 피하기 위해 희망했지만이게 내가 읽은이 목적을 위해 사용되는 일반적인 인터페이스의 일종 나타납니다. 입력에 감사드립니다. 호기심에서 벗어난 – moonlightcheese

1

두 가지 활동간에 블루투스 서비스를 공유하기 위해 앱을 다시 작성하는 중입니다. 이전에는 시작 활동 (서비스가 설정된 곳과 다른 활동이 시작된 곳)에서 공개 객체로 bluetooth 서비스를 초기화 한 다음 .read() 및 .write()를 호출하여 문제를 해결했습니다.) 기능을 새 활동에서 가져온다. 이것은 쓰기에 잘 작동하지만 읽기에는 약간 번거롭기 때문에 (데이터를 기대하고 데이터를 기다릴 때마다 스레드를 시작해야합니다). 저는 다른 모든 프로젝트를 마이 그 레이션하여 특정 키 데이터를 서비스에서 읽을 때 (예 : 코딩 된 온도 데이터를 수신 할 때 사용자 인터페이스의 온도 업데이트) bluetooth 서비스 핸들러에서 큐에 넣은 특정 작업 만 수행했습니다. 새로운 활동 때

/** 
* Change the handler (route handler info to new activity). */ 
public synchronized void newHandler(Handler handle) { 
    mHandler = handle; 
} 

그런 다음 새로운 활동의 새로운 핸들러를 재 할당이 기능을 호출 은 모두 활동을 더 우아한 독서를 할 수 있으려면, 내 블루투스 서비스에 새로운 기능을 추가 시작됨 (예 : "StartingActivity.mBTService. 물론 StartingActivity로 돌아 가면 핸들러를 적절하게 재 할당해야합니다 .-)

놀랍게도, 블루투스 서비스를 만드는 데 드는 모든 오버 헤드없이 (성공적으로 코드를 작성하지 못했습니다.)

필자는 더 철저히 테스트 할 것이지만 잘하면이 도움이 될 것입니다. 이 커뮤니티에서 많은 것을 배웠습니다.)

관련 문제