Android – Detecção facial utilizando o OpenCV (OpenCV in Android Studio with face detect)

open_cv

Detecção facial utilizando OpenCV no Android – OpenCV in Android Studio with face detect

This application is a sample Android Studio project (tested on gradle 3.0.1) with ‘Android SDK OpenCV 3.3.1′

Project: https://github.com/helpdeveloper/AndroidFaceDetectOpenCV

Usage:

Here is how to use this project to run native OpenCV code.

  • Make sure you have Android SDK up to date, with NDK installed
  • Download latest OpenCV SDK for Android from OpenCV.org and decompress the zip file.
  • Clone this project
  • Create a symlink named jniLibs in app/src/main that points to YOUR_OPENCV_SDK/sdk/native/libs
  • In app/CMakeLists.txt change line 9 to points to YOUR_OPENCV_SDK/sdk/native/jni/include
  • Sync gradle
  • Run the application

-> README FILE -<

 

Android / Gradle 3.0.X – Error:All flavors must now belong to a named flavor dimension. Learn more at ….

gradle

Erro: todos os sabores devem agora pertencer a uma dimensão de sabor nomeada.

Simples solução, em seu build.gradle:

android{
    ...
    flavorDimensions "default"
    productFlavors{
        flavor1{...}
        flavor2{...}
    }
}

Claro que ficou bem mais abrangente os flavors, para mais informações: https://developer.android.com/studio/build/build-variants.html#flavor-dimensions

Maven – Adicionando / Instalando um Jar no seu repositório local Maven (Generating a generic POM – install external Jar file to local repo)

mavenHá momentos em que você não tem um POM para um artefato de terceiros. Por exemplo, ao utilizar um JAR proprietário ou comercial. O install-plugin pode criar um POM genérico neste caso, que contém o conjunto mínimo de elementos POM exigidos pelo Maven, como groupId, artifactId, version, packaging. Você diz a Maven que gere um POM configurando o parâmetro generatePom como true.

Conseguimos fazer isso com o seguinte comando:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file \
    -Dfile=home/helpdev/jars/MyLib.jar \
    -DgroupId=br.com.helpdev \
    -DartifactId=MyLib \
    -Dversion=2.0.0 \
    -Dpackaging=jar \
    -DgeneratePom=true \
    -DupdateReleaseInfo=true

#configuração para deploy em outro dir sem ser seu local repo.
#-DlocalRepositoryPath=local-maven-repo

Fonte: http://maven.apache.org/plugins/maven-install-plugin/examples/generic-pom-generation.html

Maven – Configurando proxy (Maven Configuring a proxy)

maven

Para configurar o proxy no Maven basta criar ou editar o arquivo de configuração settings.xml no diretorio: ${user.home}/.m2/settings.xml
Caso você queira configurar para apenas um projeto, é só inserir esse arquivo junto ao diretorio aonde esta seu pom.xml.

 

    <settings>
      .
      .
      <proxies>
       <proxy>
          <id>example-proxy</id>
          <active>true</active>
          <protocol>http</protocol>
          <host>proxy.example.com</host>
          <port>8080</port>
          <username>proxyuser</username>
          <password>somepassword</password>
          <nonProxyHosts>www.google.com|*.example.com</nonProxyHosts>
        </proxy>
      </proxies>
      .
      .
    </settings>

Fonte: https://maven.apache.org/guides/mini/guide-proxies.html

Java/Kotlin -Utilizando um unico array para os argumentos do String.format() (String.format() takes an array as a single argument)

java_kotlin

Como passar os argumentos de um String format em uma unica lista de parametros.

Em Java:

        
        String a = "V1: %s - V2: %s - V3: %s";
        List strings = new ArrayList();
        strings.add("var1");
        strings.add("var2");
        strings.add("var3");

        System.out.println(String.format(a, (Object[]) strings.toArray()));

Em Android utilizando Kotlin:

       
        val a = "V1: %s - V2: %s - V3: %s"
        val strings = ArrayList()
        strings.add("var1")
        strings.add("var2")
        strings.add("var3")

        println(String.format(a, *strings.toTypedArray() as Array<*>))

Android – Como alterar os atributos do TextView da mensagem de um Snackbar

Android

            snack = Snackbar.make(my_id_layout, myMessage, Snackbar.LENGTH_INDEFINITE);
            val view = snack!!.getView()
            val tv = view.findViewById<TextView>(android.support.design.R.id.snackbar_text)
            tv.setTextColor(Color.WHITE)
            tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f);
            snack!!.show()

Para uma simples alteração de cor podemos utilizar:

snack.setActionTextColor(Color.RED)

Ou:

 
Snackbar.make(view, 
       Html.fromHtml("Tap to open").show()

Também podemos alterar o background:

 snackbar.getView().setBackgroundColor(Color.BLACK);

Android – android.os.FileUriExposedException: file:///storage/emulated/0/{MY_FILE} exposed beyond app through Intent.getData()

files java file intent data

Problema:

FATAL EXCEPTION: Thread-2
Process: br.com.helpdev.teste, PID: 26078
android.os.FileUriExposedException: file:///storage/emulated/0/{MY_FILE} exposed beyond app through Intent.getData()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:1813)
at android.net.Uri.checkFileUriExposed(Uri.java:2360)
at android.content.Intent.prepareToLeaveProcess(Intent.java:8981)
at android.content.Intent.prepareToLeaveProcess(Intent.java:8942)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1583)
at android.app.Activity.startActivityForResult(Activity.java:4228)
at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67)
at android.app.Activity.startActivityForResult(Activity.java:4187)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:732)
at android.app.Activity.startActivity(Activity.java:4515)
at android.app.Activity.startActivity(Activity.java:4483)
at br.com.helpdev.teste.sistema.pacote.PacotesUtils.instalarPacote(PacotesUtils.java:29)
at br.com.helpdev.teste.sistema.pacote.GerenciadorPacotes.install(GerenciadorPacotes.java:154)
at br.com.helpdev.teste.sistema.pacote.GerenciadorPacotes$2.run(GerenciadorPacotes.java:172)

Solução:
O correto seria utilizar o FileProvider mas uma solução “workaround” bem simples seria: Continue reading

Android – Como pegar uma View da Activity dentro de um Fragment (getActivity().findViewById returns null, called from fragment onActivityCreated)

Android

O segredo para não retornar null é utilizar o getActivity().findViewById dentro do método onActivityCreated

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        activity.findViewById<Button>(R.id.bt_iniciar).setOnClickListener({
            startActivity(Intent(activity, MyActivity::class.java))
        })
    }