-
Posts
5 -
Cadastrado em
-
Última visita
Reputação
0-
AndroidSDK Permissões não Visualizadas + Galeria e Câmera não abrem
AgnaldoMR postou um tópico em Java/Android SDK
Olá pessoal! Preciso muito da ajuda de vocês. Abraço. Não estou conseguindo que o App traga as autorizações e consequentemente não consigo acessar a Classe ConfiguracoesActivity. Pelo menos não pela instalação direta do apk (loja Google e local) e nem completa por Debug pelo Android Studio. Elas só vêm a ser visualizadas e tem acesso à galeria e à câmera com a depuração linha à linha. Se eu autorizo manualmente no celular (câmera e arquivos), quando na instalação direta do apk ou instalação pelo Android Studio, consigo acessar a classe, mas, não consigo utilizar a Câmera e nem a Galeria. Volta para activity anterior ao clicar em ambos os botões e sem log de erro que possa ajudar com mais clareza. Estou testando direto no celular com Android versão 10, API 29. Testei em celular com o modo desenvolvedor ativado e em outro celular sem o modo desenvolvedor. Já tentei desinstalar e instalar novamente o App e não resolveu. Segue o log-cat no momento do click: Click Botão Câmera E/ViewRootImpl: sendUserActionEvent() mView returned. E/ViewRootImpl: sendUserActionEvent() mView returned. E/NetworkScheduler.ATC: Called cancelTask for already completed task com.google.android.gms/.measurement.PackageMeasurementTaskService{u=0 tag="Measurement.PackageMeasurementTaskService.UPLOAD_TASK_TAG" trigger=window{start=2435s,end=4872s,earliest=-3150s,latest=-713s} requirements=[NET_CONNECTED] attributes=[PERSISTED] scheduled=-5585s last_run=-641s exec_window_multiplier=1.0000 jid=N/A status=ACTIVE retries=0 client_lib=GMS_TASK_SCHEDULER-211213000} :1 [CONTEXT service_id=218 ] E/NetworkScheduler.ATC: Called cancelTask for already completed task com.google.android.gms/.measurement.PackageMeasurementTaskService{u=0 tag="Measurement.PackageMeasurementTaskService.UPLOAD_TASK_TAG" trigger=window{start=2435s,end=4872s,earliest=-3150s,latest=-713s} requirements=[NET_CONNECTED] attributes=[PERSISTED] scheduled=-5585s last_run=-641s exec_window_multiplier=1.0000 jid=N/A status=ACTIVE retries=0 client_lib=GMS_TASK_SCHEDULER-211213000} :1 [CONTEXT service_id=218 ] E/WindowManager: win=Window{7f49c55 u0 Splash Screen com.sec.android.app.camera EXITING} destroySurfaces: appStopped=false win.mWindowRemovalAllowed=true win.mRemoveOnExit=true win.mViewVisibility=0 caller=com.android.server.wm.AppWindowToken.destroySurfaces:1190 com.android.server.wm.AppWindowToken.destroySurfaces:1171 com.android.server.wm.WindowState.onExitAnimationDone:4994 com.android.server.wm.-$$Lambda$01bPtngJg5AqEoOWfW3rWfV7MH4.accept:2 java.util.ArrayList.forEach:1262 com.android.server.wm.AppWindowToken.onAnimationFinished:3496 com.android.server.wm.-$$Lambda$yVRF8YoeNdTa8GR1wDStVsHu8xM.run:2 E/BufferQueueProducer: [com.amrcodeti.course.empresa/com.amrcodeti.course.empresa.activity.ConfiguracoesActivity$_19666#0] disconnect: not connected (req=1) E/WindowManager: win=Window{8e5e5af u0 com.amrcodeti.course.empresa/com.amrcodeti.course.empresa.activity.ConfiguracoesActivity} destroySurfaces: appStopped=true win.mWindowRemovalAllowed=false win.mRemoveOnExit=false win.mViewVisibility=8 caller=com.android.server.wm.AppWindowToken.destroySurfaces:1190 com.android.server.wm.AppWindowToken.destroySurfaces:1171 com.android.server.wm.AppWindowToken.notifyAppStopped:1226 com.android.server.wm.ActivityRecord.activityStoppedLocked:2579 com.android.server.wm.ActivityTaskManagerService.activityStopped:2356 android.app.IActivityTaskManager$Stub.onTransact:2183 android.os.Binder.execTransactInternal:1021 E/libprocessgroup: set_timerslack_ns write failed: Operation not permitted E/libprocessgroup: set_timerslack_ns write failed: Operation not permitted E/NetworkScheduler.ATC: Called cancelTask for already completed task com.google.android.gms/.measurement.PackageMeasurementTaskService{u=0 tag="Measurement.PackageMeasurementTaskService.UPLOAD_TASK_TAG" trigger=window{start=2435s,end=4872s,earliest=-3152s,latest=-715s} requirements=[NET_CONNECTED] attributes=[PERSISTED] scheduled=-5587s last_run=-643s exec_window_multiplier=1.0000 jid=N/A status=ACTIVE retries=0 client_lib=GMS_TASK_SCHEDULER-211213000} :1 [CONTEXT service_id=218 ] E/Layer: [Surface(name=AppWindowToken{9111a02 token=Token{a88bf4d ActivityRecord{56eac76 u0 com.amrcodeti.course.empresa/.activity.ProdutoControleActivity t355}}})/@0x99b6841 - animation-leash#0] No local sync point found E/Layer: [Surface(name=AppWindowToken{f9ecf97 token=Token{4ce2a16 ActivityRecord{567331 u0 com.sec.android.app.launcher/.activities.LauncherActivity t154}}})/@0x6d06094 - animation-leash#0] No local sync point found E/Layer: [Surface(name=34f0ecf com.android.systemui.ImageWallpaper)/@0x660f47d - animation-leash#0] No local sync point found E/BufferQueueProducer: [com.amrcodeti.course.empresa/com.amrcodeti.course.empresa.activity.ProdutoControleActivity$_19666#0] disconnect: not connected (req=1) E/WindowManager: win=Window{eae935 u0 com.amrcodeti.course.empresa/com.amrcodeti.course.empresa.activity.ProdutoControleActivity} destroySurfaces: appStopped=true win.mWindowRemovalAllowed=false win.mRemoveOnExit=false win.mViewVisibility=8 caller=com.android.server.wm.AppWindowToken.destroySurfaces:1190 com.android.server.wm.AppWindowToken.destroySurfaces:1171 com.android.server.wm.AppWindowToken.notifyAppStopped:1226 com.android.server.wm.ActivityRecord.activityStoppedLocked:2579 com.android.server.wm.ActivityTaskManagerService.activityStopped:2356 android.app.IActivityTaskManager$Stub.onTransact:2183 android.os.Binder.execTransactInternal:1021 Click Botão Galeria E/ViewRootImpl: sendUserActionEvent() mView returned. E/ViewRootImpl: sendUserActionEvent() mView returned. E/NetworkScheduler.ATC: Called cancelTask for already completed task com.google.android.gms/.measurement.PackageMeasurementTaskService{u=0 tag="Measurement.PackageMeasurementTaskService.UPLOAD_TASK_TAG" trigger=window{start=2435s,end=4872s,earliest=-2938s,latest=-501s} requirements=[NET_CONNECTED] attributes=[PERSISTED] scheduled=-5373s last_run=-429s exec_window_multiplier=1.0000 jid=N/A status=ACTIVE retries=0 client_lib=GMS_TASK_SCHEDULER-211213000} :1 [CONTEXT service_id=218 ] E/NetworkScheduler.ATC: Called cancelTask for already completed task com.google.android.gms/.measurement.PackageMeasurementTaskService{u=0 tag="Measurement.PackageMeasurementTaskService.UPLOAD_TASK_TAG" trigger=window{start=2435s,end=4872s,earliest=-2938s,latest=-501s} requirements=[NET_CONNECTED] attributes=[PERSISTED] scheduled=-5373s last_run=-429s exec_window_multiplier=1.0000 jid=N/A status=ACTIVE retries=0 client_lib=GMS_TASK_SCHEDULER-211213000} :1 [CONTEXT service_id=218 ] E/BufferQueueProducer: [com.amrcodeti.course.empresa/com.amrcodeti.course.empresa.activity.ConfiguracoesActivity$_19666#0] disconnect: not connected (req=1) E/BufferQueueProducer: [com.amrcodeti.course.empresa/com.amrcodeti.course.empresa.activity.ConfiguracoesActivity$_19666#0] disconnect: not connected (req=1) E/WindowManager: win=Window{faccb98 u0 com.amrcodeti.course.empresa/com.amrcodeti.course.empresa.activity.ConfiguracoesActivity} destroySurfaces: appStopped=true win.mWindowRemovalAllowed=false win.mRemoveOnExit=false win.mViewVisibility=8 caller=com.android.server.wm.AppWindowToken.destroySurfaces:1190 com.android.server.wm.AppWindowToken.destroySurfaces:1171 com.android.server.wm.AppWindowToken.notifyAppStopped:1226 com.android.server.wm.ActivityRecord.activityStoppedLocked:2579 com.android.server.wm.ActivityTaskManagerService.activityStopped:2356 android.app.IActivityTaskManager$Stub.onTransact:2183 android.os.Binder.execTransactInternal:1021 Class ConfiguraçõesActivity import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import android.Manifest; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.ImageDecoder; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import java.util.ArrayList; import java.util.List; import dmax.dialog.SpotsDialog; public class ConfiguracoesActivity extends AppCompatActivity { private String[] permissoesNecessarias = new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA }; private ImageButton imageButtonCamera, imageButtonGaleria; private static final int SELECAO_CAMERA = 100; private static final int SELECAO_GALERIA = 200; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_configuracoes); //Validar permissões Permissao.validarPermissoes(permissoesNecessarias, this, 1); imageButtonCamera = findViewById(R.id.imageButtonCamera); imageButtonGaleria = findViewById(R.id.imageButtonGaleria); imageButtonCamera.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if ( i.resolveActivity(getPackageManager()) != null ){ startActivityForResult(i, SELECAO_CAMERA ); } } }); imageButtonGaleria.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI ); if ( i.resolveActivity(getPackageManager()) != null ){ startActivityForResult(i, SELECAO_GALERIA ); } } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if ( resultCode == RESULT_OK ){ Bitmap imagem = null; try { switch ( requestCode ){ case SELECAO_CAMERA: imagem = (Bitmap) data.getExtras().get("data"); break; case SELECAO_GALERIA: Uri localImagemSelect = data.getData(); if (android.os.Build.VERSION.SDK_INT >= 29){ // Para uso da depreciação em versões mais novas imagem = ImageDecoder.decodeBitmap(ImageDecoder.createSource(getContentResolver(), localImagemSelect)); } else{ // Para uso de versões anteriores (getBitmap = depreciada) imagem = MediaStore.Images.Media.getBitmap(getContentResolver(), localImagemSelect); } break; } //Implementação para salvar a imagem omitida (pois, o problema é acessar a galeria e a câmera - Imagem (Câmera ou Galeria) é adicionada à uma imageView) }catch (Exception e){ exibirMensagem("Erro ao salvar Imagem: \n" + e.getMessage()); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); for ( int permissaoResultado : grantResults ){ if ( permissaoResultado == PackageManager.PERMISSION_DENIED ){ alertaValidacaoPermissao(); } } } private void alertaValidacaoPermissao(){ … } } Class Permissão import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.provider.Settings; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import java.util.ArrayList; import java.util.List; public class Permissao { public static boolean validarPermissoes(String[] permissoes, Activity activity, int requestCode){ if (Build.VERSION.SDK_INT >= 23 ){ List<String> listaPermissoes = new ArrayList<>(); /*Percorre as permissões passadas, verificando uma a uma * se já tem a permissao liberada */ for ( String permissao : permissoes ){ Boolean temPermissao = ContextCompat.checkSelfPermission(activity, permissao) == PackageManager.PERMISSION_GRANTED; if ( !temPermissao ) listaPermissoes.add(permissao); } /*Caso a lista esteja vazia, não é necessário solicitar permissão*/ if ( listaPermissoes.isEmpty() ) return true; String[] novasPermissoes = new String[ listaPermissoes.size() ]; listaPermissoes.toArray( novasPermissoes ); //Solicita permissão ActivityCompat.requestPermissions(activity, novasPermissoes, requestCode ); } return true; } } Manifest <uses-feature android:name="android.hardware.camera2" android:required="false" /> <!-- Loja Google não disponibiliza mais instalação com "true" --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> Projeto minSdkVersion 16 targetSdkVersion 30 -
AndroidSDK Layout Inflater com bug, pela Classe Adapter Android
AgnaldoMR postou um tópico em Java/Android SDK
Desculpe-me pelo texto longo. É assim: Estou inflando um layout personalizado no clique de um TextView pelo "MyViewHolder holder" utilizando o AlertDialog.Builder implementado em uma classe Adapter. Infla perfeitamente, sem erros. O fato é que quando clico no layout inflado para alterar o valor no EditText, normalmente com um clique de velocidade média, o App simplesmente fecha. Coloquei tudo em um bloco try/catch, mesmo assim não mostra o erro. Se eu clico e seguro um pouco mas ele aceita (nem sempre), não fecha e a ação, quando confirmo no botão do AlertDialog, é executada sem problemas. Tentei depurar e todos os valores são preenchidos corretamente. Não traz exceções. E normalmente é no primeiro click depois de carregar o App após um período inativo ou na primeira execução. Aí o App fecha, eu abro novamente e depois segue mais firme, sem erros constantes, mas, ainda ocorrendo um ou outro. Como se faltasse carregar algo completamente! Observando mais minuciosamente, está sendo inflado pela classe Adapter e os erros só ocorrem nas classes Fragments, quando são chamados e clicados. Nas Activity`s não ocorre o fechamento. Não poderia inflar pelo recyclerView, pois, são muitos fragments e eu teria que implementar em cada um. Obs. Eu inflo por um clique numa ImageView do adapter (uma ação) e no textView do adapter (outra ação) = carrinho e favoritos que funcionam em conjunto, mas, com ações distintas.. Alguém teria uma maneira ou um recurso diferente que possa me ajudar à resolver isto? O mais detalhado possível, pois, não tenho muito habilidade ainda. Desde já fico muito grato. Abaixo foram as tentativas que eu fiz e todas funcionam. É só a questão do bug de clique mesmo: 01- import androidx.appcompat.app.AlertDialog; ou 02- import android.app.AlertDialog; 03- LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.dialog_Solicitacao, null, false); builder.setView(view); 04- View view = View.inflate(context,R.layout.dialog_Solicitacao,null); builder.setView(view); 05- AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Solicitação"); builder.setMessage("Digite o valor"); EditText editValor = new EditText(context); builder.setView(editValor); //LAYOUT ORIGINAL INFLADO PELA CLASSE ADAPTER try{ // >>> Caixa de diálogo AlertDialog.Builder builder = new AlertDialog.Builder(context); // builder = construtor builder.setTitle("Carrinho"); builder.setMessage("Exemplo: 2 (igual à 2UN)"); builder.setIcon(R.drawable.logo_marca); //LayoutInflater inflater = LayoutInflater.from(context); //View viewQuantidade = inflater.inflate(R.layout.dialog_quantidade_car, null, false); // ou //View viewQuantidade = LayoutInflater.from(context).inflate(R.layout.dialog_quantidade_car, null); // ou View viewQuantidade = View.inflate(context,R.layout.dialog_quantidade_car,null); editQuantidade = viewQuantidade.findViewById(R.id.editText_DialogQteCar_Quantidade); editQuantidade.setText("1"); // Já recebe um valor padrão editQuantidade.requestFocus(); editQuantidade.selectAll(); // Para focar e selecionar TextView textUnidade = viewQuantidade.findViewById(R.id.textView_DialogQteCar_Unidade); textUnidade.setText("Unidade"); TextView textObserv = viewQuantidade.findViewById(R.id.textView_DialogQteCar_Observacao); textObserv.setText(textObserv.getText()); // Texto padrão do Layout builder.setView(viewQuantidade); builderUp.setPositiveButton("Confirmar", new DialogInterface.OnClickListener(){... closeKeyboard() builderUp.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {... closeKeyboard() AlertDialog dialogUp = builderUp.create(); // Criar dialogUp.show(); // Exibir showKeyboard(); private void showKeyboard(){... // Ativar teclado private void closeKeyboard(){... // Desativar teclado -
AgnaldoMR alterou sua foto pessoal
-
Minha segunda e desesperada pergunta. Tentei horas e até dias procurar exemplos de aplicação para extensões de conexão do VS 2019 (em c#) com o firebase, mas, sem nenhum sucesso. Sinto que quase ninguém usa por falta de informação mais detalhada. Baixei as extensões FirebaseAuthentication.net, FirebaseDatabase.net e também do FireSharp no VS. Mas, a documentação é muito superficial e não estou conseguindo utilizar. Preciso de exemplo: 1- Enviar e buscar informação de autenticação do usuário com e-mail e senha 2- Acessar os nós e seus filhos para leitura e escrita. 3- O que significa .StartAt(???) .LimitToFirst(???) .OnceAsync(); (do FirebaseDatabase.net) 4- Principais propriedades de cada "using" necessários. 5- Como buscar e enviar dados pelo comando push de id único pelo firebase. Exemplo: var firebase = new Firebase.Database.FirebaseClient("https://fir-app-20502.firebaseio.com/"); var idUser = await firebase .Child("CSharp") .OrderByKey() .StartAt(???) .LimitToFirst(???) .OnceAsync<???>(); Andei vendo alguns vídeos de um indiano sobre o firesharp, mas, não tem nada sobre autenticação. Por favor. Se alguém puder me dar uma direção mais detalhada de como utilizar, fico muito grato. Preciso muito.
-
Visual Basic Worksheet Change modificando o valor digitado VBA Excel
AgnaldoMR respondeu ao tópico de AgnaldoMR em Programação - outros
Funcionou perfeitamente. Olha que já pesquisei e não encontrei nada no assunto. e tentei muitas vezes sem sucesso. A inexperiência com VBA falou mais alto. Muito obrigado, valeu !!! Espero poder ajudar outros um dia... -
Visual Basic Worksheet Change modificando o valor digitado VBA Excel
AgnaldoMR postou um tópico em Programação - outros
Olá caros colaboradores. Vocês têm me ajudado muito. Obrigado. Tenho um problema que não consigo solucionar. Preciso pegar o valor digitado na célula e modificá-lo automaticamente com base em uma condição, acrescentando à ele o valor de outra célula. Tentei assim: Private Sub Worksheet_Change(ByVal Target As Excel.Range) 'Dim index As Integer celula = Range("A" & Target.Row) 'For index = 1 To 1 If Target.Column = 1 Then ThisRow = Target.Row If Target.Value > 0 Then 'Range("C" & ThisRow).Value = Range("A" & ThisRow).Value Range("A" & ThisRow).Value = celula & (Range("B" & ThisRow).Value) 'Range("A" & ThisRow).Value = (Range("C" & ThisRow).Value) & (Range("B" & ThisRow).Value) 'Range("B" & ThisRow).ClearContents 'Range("C" & ThisRow).ClearContents Else Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone End If 'Application.EnableEvents = False End If 'Next 'Exit sub End Sub 'As partes comentadas foram tentativas que fiz sem sucesso. Quando digito 400 na colunaA em uma linha qualquer é acrescentado a unidade KG (da colunaB ) ao valor 400. O resultado é sempre assim. Um loop: 400KGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKG Preciso muito de uma solução. Muito obrigado.
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais