Android Application Development For Dummies All-in-One
"Meu aplicativo precisa de um receptor de radiodifusão. Alguém pode me lembrar de como eu pode codificar um receptor de transmissão? E enquanto você está nisso, como é que uma atividade retornar um resultado? Oh, Parreira. Onde posso encontrar todas as coisas que rapidamente?"
Menu
Tendo exemplos dos tipos de código usado no desenvolvimento de aplicações Android pronto-a-lado, pode ser uma grande ajuda. Você encontrará a abundância de exemplos aqui.
atividades
Aqui está uma atividade que inicia outra atividade:
classe pública CheatSheetActivity estende Activityimplements onclickListener {botão button1-static final String MY_ACTION = "com.allmycode.action" -static final de Cordas MY_URI = "my_scheme: my_scheme_specific_part" - @ Overridepublic vazio onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) - setContentView (R.layout.main) -button1 = (Button) findViewById (R.id.button1) -button1.setonclickListener (this) -} public void onclick (Ver arg0) {intenção intenção = new Intent () - intent.setAction (MY_ACTION) -intent.setData (URI.parse (MY_URI)) - startActivity (intenção) -}}
E não se esqueça - quando você cria uma nova classe de atividade, você deve adicionar um elemento correspondente ao seu AndroidManifest.xml Arquivo. o OtherActivity Filtro intenção do elemento é algo como isto:
Para obter um resultado de uma atividade, adicione o seguinte código (ou algo parecido com isso) para seu aplicativo:
última CODE_NUMBER int = 42-de-final da corda CLASSNAME = "CheatSheetActivity" -public vazio onclick (Ver arg0) {Intenção intenção = new Intent()-intent.setAction(MY_ACTION)-intent.setData(Uri.parse(MY_URI))-startActivityForResult(intent, CODE_NUMBER) -} protected void onActivityResult (int Codenumber, resultCode int, Intenção intenção) {if (resultCode == RESULT_OK) {if (Codenumber == CODE_NUMBER) {Log.i (CLASSNAME, intent.getData () getSchemeSpecificPart ()). -}}}
E na actividade que cria o resultado, adicionar o código do tipo seguinte:
Intenção intenção = new Intent () - intent.setData (URI.parse ( "resultado: Olá")) - setResult (RESULT_OK, a intenção) -Término () -
Serviços
Um serviço normalmente faz o seu trabalho sem se preocupar (ou mesmo notificar) o usuário. Por exemplo, um serviço de preço das ações pode chegar à web e obter os preços mais recentes de picaretas favoritos do usuário. Outra atividade do aplicativo pode obter dados do serviço e exibir os dados na tela do dispositivo.
O código a seguir é um serviço de tempo completo (mas não muito precisos):
classe pública MyWeatherService estende Serviço {Mensageiro messengerToClient = null-MyIncomingHandler myIncomingHandler = new MyIncomingHandler () - Mensageiro messengerToService = new Mensageiro (myIncomingHandler) - @ Overridepublic IBinder onBind (Intenção intenção) {return messengerToService.getBinder () -} class MyIncomingHandler estende Handler { @Overridepublic handleMessage void (Mensagem incomingMessage) {resposta messengerToClient = incomingMessage.replyTo-Bundle = new Bundle () - reply.putString ( "tempo", "é escuro à noite.") - Mensagem replyMessage = Message.obtain () - replyMessage .setData (resposta) -tentar {messengerToClient.send (replyMessage) -} catch (RemoteException e) {e.printStackTrace () -}}}}
Em outro pacote, você colocar o código para chamar o serviço de meteorologia. Aqui está um código de exemplo:
classe pública ServiceConsumerActivity estende Activityimplements onclickListener {Mensageiro messengerToService = null-MyIncomingHandler myIncomingHandler = new MyIncomingHandler () - Mensageiro messengerFromService = new Mensageiro (myIncomingHandler) conexão -ServiceConnection = new MyServiceConnection () - SharedPreferences prefs-booleano IsBound = false-vazio bind () { intenção intenção = new Intent () - intent.setAction ( "com.allmycode.WEATHER") - IsBound = bindService (intenção, conexão, Context.BIND_AUTO_CREATE) -} QueryService public void () {if (IsBound) {pacote pacote = new Bundle () - bundle.putString ( "localização", "Philadelphia") - mensagem mensagem = Message.obtain () - message.replyTo = messengerFromService-message.setData (bundle) -tentar {messengerToService.send (mensagem) -} catch (RemoteException e) {e.printStackTrace () -}} else {textView1.setText (R.string.service_not_bound) -}} class MyIncomingHandler estende Handler {@Overridepublic handleMessage void (Mensagem msg) {pacote pacote = msg.getData () -textView1.setText (bundle.getString ( "tempo")) -}} vazio unbind () {if (IsBound) {unbindService (conexão) -isBound = false -}} class MyServiceConnection implementa ServiceConnection {public void onServiceConnected (ComponentName className, IBinder aglutinante) {messengerToService = new Mensageiro (aglutinante) -} public void onServiceDisconnected (ComponentName n) {messengerToService = null -}} // Eu não incluem o método onCreate ou o método // onclick neste exemplo}.
Claro, nenhum app sobrevive sem alguns elementos do arquivo de manifesto. Para registrar o serviço desta seção, você precisa de um elemento do tipo seguinte:
receptores de radiodifusão
Quando você faz uma transmissão, você arremessar uma intenção para fora no selvagem. receptores de radiodifusão com filtros intenção compatíveis acordar e fazer algo de útil com as informações de difusão. (Depois de fazer alguma coisa com a informação de transmissão, o receptor volta a dormir. Na minha próxima encarnação, quero ser um receptor de transmissão.)
Para criar seu próprio receptor de radiodifusão, você estende Android do BroadcastReceiver classe e você declarar um OnReceive método. Por exemplo, o código a seguir responde às transmissões correspondentes:
classe pública MyReceiver estende BroadcastReceiver {@Overridepublic vazio OnReceive (context Contexto, Intenção intenção) {// Fazer coisas importantes}}
Outro aplicativo cria uma transmissão com o código do seguinte tipo:
Intenção intenção = new Intent () - intent.setAction ( "com.allmycode.ACTION") - sendBroadcast (intenção) -
Você pode registrar um receptor de radiodifusão em sua AndroidManifest.xml Arquivo:
Para mais flexibilidade, você pode registrar um receptor no seu código Java. O seguinte código Java faz essencialmente o que o elemento em uma AndroidManifest.xml arquivo faz:
IntentFilter filtro = new IntentFilter () - filter.addAction ( "com.allmycode.ACTION") - registerReceiver (nova MyReceiver (), filtro) -
Os provedores de conteúdo
provedor de conteúdo de um aplicativo torna os dados disponíveis para outros aplicativos que são executados no mesmo dispositivo. A interface do provedor de se assemelha a interface de um banco de dados, com tabelas, linhas, cursores, e todas essas coisas boas. Por exemplo, o código para consultar um provedor de conteúdo se parece com isso:
consulta pública Cursor (Uri uri, String [] colunas, corda whereClause, String [] whereArgs, String sortOrder) {Cursor cursor = código de null-int = uriMatcher.match (URI) -se (código == 1) {cursor = db .query (SIMPLETABLE, colunas, whereClause, whereArgs, null, null, sortOrder) -} else if (código == 2) {string [] columnNames = { "_id", "nome", "quantidade"} -String [] rowValues = { "Tabela", "4", "2"} -MatrixCursor matrixCursor = new matrixCursor (columnNames) -matrixCursor.addRow (rowValues) -cursor = matrixCursor-} return Cursor-}
fragmentos
UMA fragmento é como uma visão - uma coisa visível, que pode apresentar dentro de uma atividade. Mas ao contrário de um ponto de vista, um fragmento tem seus próprios métodos de ciclo de vida. Então Android pode criar uma pequena pilha de fragmentos dentro de uma atividade. Quando o usuário pressiona o botão Voltar, Android aparece um fragmento fora da pilha. (Se não houver fragmentos de pop, Android aparece toda a atividade da pilha de tarefas).
Você pode colocar um fragmento para o seguinte layout frame:
Para colocar um fragmento para o layout, você executa uma transação fragmento. Aqui está o que uma transação fragmento parece:
DocsFragment docsFragment = DocsFragment.newInstance (index) -FragmentManager fragmentManager = getFragmentManager () - FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction () - fragmentTransaction.replace (R.id.docs, docsFragment) -fragmentTransaction.addToBackStack (null) -fragmentTransaction.commit ( ) -
Intentos e Intent Filtros
Quando a intenção encontra o filtro de intenção correta, o resultado é um jogo feito no céu. Mas as regras para as intenções combinando com filtros são complicadas. As regras lido como as cláusulas legais em um acordo pré-nupcial.
Você pode usar métodos Java para descrever uma intenção. Aqui estão alguns métodos utilizados com frequência:
setAction: Define a ação da intenção. (A intenção pode ter apenas uma ação.)
AddCategory: Adiciona uma categoria para a intenção. (A intenção pode ter muitas categorias.)
setdata: Define URI da intenção, e remove o tipo MIME do intenção (se a intenção tem um tipo de MIME).
setType: Define o tipo MIME do intenção e remove URI da intenção (se a intenção tem um URI).
setDataAndType: Define tanto URI da intenção e tipo MIME da intenção. De acordo com os documentos, "Este método deve muito raramente ser utilizado."
Você também pode usar o código XML para descrever uma intenção.
No URI https://allmycode.com:80/android, o esquema é http, o anfitrião é allmycode.com, o porto é 80, eo caminho é andróide. A autoridade (que não é um dos atributos em um elemento, mas é útil para saber sobre) é allmycode.com:80.
Você normalmente definir os valores de um filtro de intenção na AndroidManifest.xml Arquivo. Mas no código Java, o android.content.IntentFilter classe tem vários métodos úteis. Aqui estão algumas delas:
addAction: Adiciona uma ação para o filtro.
AddCategory: Adiciona uma categoria para o filtro.
addDataScheme: Adiciona um esquema para o filtro.
addDataAuthority: Adiciona uma autoridade para o filtro.
addDataPath: Adiciona um caminho para o filtro.
addDataType: Adiciona um tipo MIME para o filtro.
Um filtro de intenção pode ter muitas acções, muitas categorias, e assim por diante.
Aqui está uma breve lista de requisitos para um jogo entre uma intenção e um filtro de intenção. Esta lista não está completa por isso, se você quiser uma lista completa, é melhor comprar Android Application Development All-in-One For Dummies por Barry Burd.
Se a intenção tem uma ação, a fim de coincidir com a intenção, um filtro de intenção deve ter um comportamento idêntico. O filtro de intenção pode ter ações adicionais. Qualquer uma destas acções adicionais não têm efeito sobre a partida.
Se a intenção tem categorias, de modo a coincidir com a intenção, um filtro de intenção deve ter estes (e possivelmente mais) categorias.
Se a intenção tem um tipo de MIME, a fim de coincidir com a intenção, um filtro de intenção deve ter um tipo MIME correspondente. O filtro de intenção pode ter tipos MIME adicionais. Qualquer um destes tipos MIME adicionais não têm efeito sobre a partida.
Se um filtro de intenção tem tipos de MIME, a fim de coincidir com o filtro de intenção, a intenção deve ter um tipo MIME e tipo MIME da intenção deve corresponder a um dos tipos de MIME do filtro.
De forma limitada, a adequação dos tipos MIME pode envolver curingas e expressões regulares.
Se a intenção tem um esquema URI, a fim de coincidir com a intenção, um filtro de intenção deve ter um esquema de URI correspondentes.
Se um filtro de intenção tem URI regimes, de modo a coincidir com o filtro de intenção, a intenção deve ter um esquema URI e URI regime da intenção deve corresponder a um dos esquemas de URI do filtro.
Para terminar esta lista, copie as duas últimas regras, mudando uma ou duas palavras em cada uma das cópias:
Se a intenção tem um URI anfitrião, a fim de coincidir com a intenção, um filtro de intenção deve ter um URI correspondência anfitrião.
Se um filtro de intenção tem URI anfitriões, a fim de coincidir com o filtro de intenção, a intenção deve ter um URI anfitrião e URI da intenção anfitrião deve corresponder a um dos URI do filtro anfitriãos.
Se a intenção tem um URI porta, a fim de coincidir com a intenção, um filtro de intenção deve ter um URI correspondência porta.
Se um filtro de intenção tem URI portos, a fim de coincidir com o filtro de intenção, a intenção deve ter um URI porta e URI da intenção porta deve corresponder a um dos URI do filtro PORts.
Se a intenção tem um URI caminho, a fim de coincidir com a intenção, um filtro de intenção deve ter um URI correspondência caminho.
Se um filtro de intenção tem URI caminhos, a fim de coincidir com o filtro de intenção, a intenção deve ter um URI caminho e URI da intenção caminho deve corresponder a um dos URI do filtro caminhos.