차례:
- 활동
- 일반적으로 서비스는 사용자를 귀찮게하지 않고 (또는 심지어 알리는 것없이) 작업을 수행합니다. 예를 들어 주가 서비스가 웹에 도달하여 사용자가 좋아하는 선택의 최신 가격을 얻을 수 있습니다. 다른 앱의 활동은 서비스에서 데이터를 가져 와서 기기의 화면에 데이터를 표시 할 수 있습니다.
- 브로드 캐스트를 수행 할 때 의도를 야생으로 내 보냅니다. 호환 가능한 인 텐트 필터가있는 브로드 캐스트 수신기는 브로드 캐스트 정보와 함께 유용한 기능을 수행합니다. (방송 정보를 가지고 뭔가를하고 나면 수신기는 다시 잠자기 상태로 돌아 간다. 다음 번 화신에서는 방송 수신기가되고 싶다.) 자신 만의 방송 수신기를 만들려면 Android의 BroadcastReceiver 클래스를 확장하고 onReceive 방법. 예를 들어 다음 코드는 일치하는 브로드 캐스트에 응답합니다.
- public Cursor query (Uri uri, String [] columns, String whereClause, String [] whereArgs, String sortOrder) {Cursor cursor = null; int code = uriMatcher. 경기 (uri); if (code == 1) {cursor = db. (string =) columnNames = { "_id", "name", "amount"}; (if, code, name, where, null, null, sortOrder); String [] rowValues = { "Table", "4", "2"}; MatrixCursor matrixCursor = 새로운 MatrixCursor (columnNames); matrixCursor. addRow (rowValues);
- 는 뷰와 같습니다. 이는 액티비티 안에 표시 할 수있는 가시적 인 객체입니다. 그러나보기와 달리 단편에는 자체 라이프 사이클 메소드가 있습니다. 그래서 안드로이드는 액티비티 내부에 작은 조각의 조각을 만들 수 있습니다. 사용자가 뒤로 버튼을 누르면 안드로이드는 스택에서 조각을 팝합니다. (팝하는 조각이 없으면 Android는 작업 스택에서 전체 활동을 팝합니다.)
- setAction :
비디오: [렌파이 실전] - 1. 안드로이드 배포하기 2024
"내 앱에는 브로드 캐스트 리시버가 필요합니다. 누군가 내가 방송 수신기를 코딩 할 수있는 방법을 생각 나게 할 수 있습니까? 그리고 여러분이 활동하는 동안 활동이 어떻게 결과를 돌려 주나요? 오. 어디서 그런 것들을 빨리 찾을 수 있습니까? "
안드로이드 애플리케이션 개발에 사용되는 코드 종류의 예제를 준비하는 것이 큰 도움이 될 수 있습니다. 여기에 많은 예제가 있습니다.
활동
다른 활동을 시작하는 활동은 다음과 같습니다.
public class CheatSheetActivity extends Activity는 OnClickListener를 구현합니다. {Button button1; static final String MY_ACTION = "com.allmycode.action"; static final String MY_URI = "my_scheme: my_scheme_specific_part"; @Override public void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (레이아웃 메인); button1 = (버튼) findViewById (버튼 1); button1. setOnClickListener (this);} public void onClick (View arg0) {의도 의도 = 새 의도 (); 의지. setAction (MY_ACTION); 의지. setData (Uri. parse (MY_URI)); start activity (intent);}}
그리고 새로운 액티비티 클래스를 만들 때 AndroidManifest에 해당 엘리먼트를 추가해야한다. XML 파일. OtherActivity 요소의 인 텐트 필터는 다음과 같습니다.
활동에서 결과를 얻으려면 다음 코드 (또는 이와 비슷한 코드)를 앱에 추가하십시오.
final int CODE_NUMBER = 42; final String CLASSNAME = "CheatSheetActivity"; public void onClick (View arg0) {의도 의도 = 새로운 의도 (); 의지. setAction (MY_ACTION); 의지. setData (Uri. parse (MY_URI)); (코드 번호 == CODE_NUMBER) {로그.}}}}}}}}}}} 결과를 생성하는 활동에서 다음과 같은 종류의 코드를 추가하십시오.
의도 의도 = 새로운 의도 (); 의지. setData (Uri. parse ("result: hello"))); setResult (RESULT_OK, 인 텐트); 끝();
서비스
일반적으로 서비스는 사용자를 귀찮게하지 않고 (또는 심지어 알리는 것없이) 작업을 수행합니다. 예를 들어 주가 서비스가 웹에 도달하여 사용자가 좋아하는 선택의 최신 가격을 얻을 수 있습니다. 다른 앱의 활동은 서비스에서 데이터를 가져 와서 기기의 화면에 데이터를 표시 할 수 있습니다.
다음 코드는 완전하지만 매우 정확한 날씨 서비스입니다:
public class MyWeatherService extends Service {Messenger messengerToClient = null; MyIncomingHandler myIncomingHandler = 새로운 MyIncomingHandler (); 메신저 messengerToService = 새 메신저 (myIncomingHandler); @ public IBinder onBind (Intent intent) {messengerToService를 반환하십시오.클래스 MyIncomingHandler는 Handler를 상속받습니다. {@Override public void handleMessage (Message incomingMessage) {messengerToClient = incomingMessage. 답장하다; 번들 응답 = 새 번들 (); 댓글. putString ("weather", "밤에는 어두워."); 메시지 replyMessage = 메시지. 얻다(); replyMessage. setData (응답); {messengerToClient를 시도하십시오. send (replyMessage);} catch (RemoteException e) {e. printStackTrace ();}}}}
다른 패키지에서는 날씨 코드를 호출하는 코드를 넣습니다. 다음은 몇 가지 샘플 코드입니다.
public class ServiceConsumerActivity extends Activity 구현 OnClickListener {Messenger messengerToService = null; MyIncomingHandler myIncomingHandler = 새로운 MyIncomingHandler (); 메신저 messengerFromService = 새 메신저 (myIncomingHandler); ServiceConnection connection = 새 MyServiceConnection (); SharedPreferences prefs; boolean isBound = false; void bind () {의도 의도 = 새로운 의도 (); 의지. setAction ("com. allmycode. WEATHER"); isBound = bindService (intent, connection, Context.BIND_AUTO_CREATE);} public void queryService () {if (isBound) {번들 번들 = 새 번들 (); 묶음. putString ("location", "Philadelphia"); 메시지 메시지 = 메시지. 얻다(); 메시지. replyTo = messengerFromService; 메시지. setData (번들); {messengerToService. send (message);} catch (RemoteException e) {e. printStackTrace ();}} else {textView1. 클래스 MyIncomingHandler는 Handler를 확장합니다. {@Override public void handleMessage (Message msg) {번들 번들 = msg. setText (String. service_not_bound);} getData (); textView1. void unbind () {if (isBound) {unbindService (connection); setText (번들. getString ("날씨")); }} // MyServiceConnection은 ServiceConnection을 구현합니다. {public void onServiceConnected (ComponentName className, IBinder 바인더) {messengerToService = 새 메신저 (바인더)} public void onServiceDisconnected (ComponentName n) {messengerToService = null; 이 예제에서는 onCreate 메서드 또는 // onClick 메서드를 포함합니다.}
물론 매니페스트 파일에 요소가 없으면 응용 프로그램이 남아 있지 않습니다. 이 섹션의 서비스를 등록하려면 다음 종류의 요소가 필요합니다.
브로드 캐스트 리시버
브로드 캐스트를 수행 할 때 의도를 야생으로 내 보냅니다. 호환 가능한 인 텐트 필터가있는 브로드 캐스트 수신기는 브로드 캐스트 정보와 함께 유용한 기능을 수행합니다. (방송 정보를 가지고 뭔가를하고 나면 수신기는 다시 잠자기 상태로 돌아 간다. 다음 번 화신에서는 방송 수신기가되고 싶다.) 자신 만의 방송 수신기를 만들려면 Android의 BroadcastReceiver 클래스를 확장하고 onReceive 방법. 예를 들어 다음 코드는 일치하는 브로드 캐스트에 응답합니다.
public class MyReceiver extends BroadcastReceiver {@Override public void onReceive (Context context, Intent intent) {// 중요한 일}}
다음 분류 중 하나입니다:
Intent intent = new Intent (); 의지. setAction ("com. allmycode. ACTION"); sendBroadcast (인 텐트);
AndroidManifest에 브로드 캐스트 리시버를 등록 할 수 있습니다.xml 파일:
보다 융통성있게하려면 Java 코드에 수신기를 등록 할 수 있습니다. 다음 Java 코드는 AndroidManifest의 요소를 본질적으로 수행합니다. xml 파일은 다음을 수행합니다.
IntentFilter filter = new IntentFilter (); 필터. addAction ("com. allmycode. ACTION"); registerReceiver (새 MyReceiver (), 필터);
콘텐츠 제공 업체
앱의 콘텐츠 제공 업체는 동일한 기기에서 실행되는 다른 앱에서 데이터를 사용할 수있게합니다. 공급자의 인터페이스는 테이블, 행, 커서 및 모든 유용한 정보와 함께 데이터베이스의 인터페이스와 비슷합니다. 예를 들어, 컨텐츠 공급자를 쿼리하는 코드는 다음과 같습니다.
public Cursor query (Uri uri, String [] columns, String whereClause, String [] whereArgs, String sortOrder) {Cursor cursor = null; int code = uriMatcher. 경기 (uri); if (code == 1) {cursor = db. (string =) columnNames = { "_id", "name", "amount"}; (if, code, name, where, null, null, sortOrder); String [] rowValues = { "Table", "4", "2"}; MatrixCursor matrixCursor = 새로운 MatrixCursor (columnNames); matrixCursor. addRow (rowValues);
프래그먼트
프래그먼트
는 뷰와 같습니다. 이는 액티비티 안에 표시 할 수있는 가시적 인 객체입니다. 그러나보기와 달리 단편에는 자체 라이프 사이클 메소드가 있습니다. 그래서 안드로이드는 액티비티 내부에 작은 조각의 조각을 만들 수 있습니다. 사용자가 뒤로 버튼을 누르면 안드로이드는 스택에서 조각을 팝합니다. (팝하는 조각이 없으면 Android는 작업 스택에서 전체 활동을 팝합니다.)
다음 프레임 레이아웃에 조각을 넣을 수 있습니다. 조각을 레이아웃에 배치하려면 조각 트랜잭션을 수행합니다. 조각 트랜잭션은 다음과 같습니다: DocsFragment docsFragment = DocsFragment. newInstance (index); FragmentManager fragmentManager = getFragmentManager (); FragmentTransaction fragmentTransaction = fragmentManager입니다. beginTransaction (); fragmentTransaction. replace (R. id. docs, docsFragment); fragmentTransaction. addToBackStack (null); fragmentTransaction. 범하다();
인 텐트 및 인 텐트 필터
인 텐트가 올바른 인 텐트 필터를 충족하면 결과는 하늘과 일치합니다. 그러나 필터와 인 텐트를 일치시키는 규칙은 복잡합니다. 규칙은 혼전 합의문의 법 조항과 같습니다.
Java 메소드를 사용하여 의도를 설명 할 수 있습니다. 다음은 자주 사용되는 메소드입니다:
setAction:
인 텐트의 액션을 설정합니다. (의도는 단 하나의 조치 만 가질 수 있습니다.)
addCategory:
-
인 텐트에 카테고리를 추가합니다. (의도는 많은 카테고리를 가질 수 있습니다.) setData:
-
인 텐트의 URI를 설정하고 인 텐트의 MIME 유형을 삭제합니다 (인 텐트에 MIME 유형이있는 경우). setType:
-
인 텐트의 MIME 유형을 설정하고 인 텐트의 URI를 제거합니다 (인 텐트에 URI가있는 경우). setDataAndType:
-
인 텐트의 URI와 인 텐트의 MIME 유형을 모두 설정합니다. 문서에 따르면 "이 방법은 거의 사용하지 않아야합니다. " XML 코드를 사용하여 의도를 설명 할 수도 있습니다.
-
URI http: // www.allmycode. com: 80 / android, 구성표는 http, 호스트는 www. allmycode. com, 포트 80, 경로는 android입니다. 권한 (요소의 속성 중 하나가 아니지만 대략 알고있는 것이 유용함)은 www입니다. allmycode. com: 80. 일반적으로 안드로이드 매니페스트에 인 텐트 필터의 값을 설정합니다. XML 파일. 하지만 자바 코드에서 안드로이드. 함유량. IntentFilter 클래스에는 유용한 메소드가 많이 있습니다. 다음은 그 중 일부입니다:
addAction:
필터에 액션을 추가합니다.
addCategory:
-
필터에 카테고리를 추가합니다. addDataScheme:
-
필터에 스킴을 추가합니다. addDataAuthority:
-
필터에 권한을 추가합니다. addDataPath:
-
필터에 경로를 추가합니다. addDataType:
-
MIME 유형을 필터에 추가합니다. 의도 필터는 많은 액션, 많은 카테고리 등을 가질 수 있습니다.
-
다음은 인 텐트 필터와 인 텐트 필터가 일치하는 데 필요한 요구 사항의 간단한 목록입니다. 이 목록은 완전하지 않으므로 완전한 목록을 원하면 Barry Burd의
인형 용 Android 응용 프로그램 개발 올인원
을 구입하는 것이 좋습니다. 인 텐트에 액션이있는 경우 인 텐트를 일치 시키려면 인 텐트 필터가 동일한 액션을 가져야합니다. 인 텐트 필터는 추가 작업을 수행 할 수 있습니다. 이 추가 행동들 중 어떤 것도 경기에 영향을 미치지 않습니다. 인 텐트에 카테고리가있는 경우 인 텐트를 일치 시키려면 인 텐트 필터에 이러한 카테고리가 있어야합니다. 인 텐트에 MIME 유형이있는 경우 인 텐트를 일치 시키려면 인 텐트 필터가 일치하는 MIME 유형을 가져야합니다. 인 텐트 필터는 추가 MIME 유형을 가질 수 있습니다. 이러한 추가 MIME 유형은 일치에 영향을 미치지 않습니다. 인 텐트 필터에 MIME 유형이있는 경우 인 텐트 필터와 일치시키기 위해 인 텐트에는 MIME 유형이 있어야하며 인 텐트의 MIME 유형은 필터의 MIME 유형 중 하나와 일치해야합니다. 제한된 범위에서 MIME 유형의 일치에는 와일드 카드 및 정규 표현식이 포함될 수 있습니다. 인 텐트가 URI 스키마를 가지고있는 경우, 인 텐트 필터는 인 텐트와 일치시키기 위해 일치하는 URI 스킴을 가져야한다. 인 텐트 필터가 URI 스킴을 갖는 경우, 인 텐트 필터를 매치하기 위해 인 텐트는 URI 스킴을 가져야하고 인 텐트의 URI 스킴은 필터의 URI 스킴 중 하나와 일치해야한다. 이 목록을 완성하려면 마지막 두 규칙을 복사하여 각 복사본에서 한 단어 또는 두 단어를 변경하십시오.
-
목적에 일치하는
-
호스트
-
URI가있는 경우 인 텐트 필터는 일치하는 URI
-
호스트
-
를 가져야합니다.
-
의도 필터가 의도 필터와 일치시키기 위해 URI
호스트
-
, 를 갖는 경우, 의도는 URI가 호스트 이고 인 텐트의 URI가 호스트 < 가 필터의 URI 호스트
-
중 하나와 일치해야합니다. 의도가 URI 포트 , 인 텐트를 가지면 인 텐트 필터는 일치하는 URI 포트 를 가져야합니다. 인 텐트 필터가 URI 포트 ,
-
를 가지고 인 텐트 필터와 일치하는 경우 인 텐트의 URI는 포트 이고 인 텐트의 URI 포트 < 는 필터의 URI 999 999 중 하나와 일치해야합니다.
-
인 텐트의 URI가 경로 인 경우 인 텐트와 일치시키기 위해 인 텐트 필터는 일치하는 URI path 를 가져야합니다. 인 텐트 필터가 URI 경로 , 를 가지고 인 텐트 필터와 일치하는 경우 인 텐트는 URI path 및 인 텐트 URI
-
path