java.lang.SecurityException : Permissão Denial ; este requer android.permission.INTERACT_ACROSS_USERS_FULL

? resus @ | Original: StackOverFlow
---

Na minha aplicação eu preciso para começar a atividade principal da seguinte maneira, conforme documentado em vários outros tópicos sobre SO :

final String packageName = getApplicationContext().getPackageName();
final Intent launchIntent = getPackageManager().getLaunchIntentForPackage(packageName);
startActivity(launchIntent);

A linha acima do código está no meu projeto de biblioteca Android como eu não sei a este lugar a classe de minha atividade principal .

Isso funciona como um encanto ao implantar o app através da interface USB em dispositivos de teste, mas esse erro ocorre quando a instalação de app do Google Play em 4.3 dispositivos.

Alguém experimentou o mesmo problema?

Edit: Eu não mencionou que vários segmentos no SO mencionou que " android.permission.INTERACT_ACROSS_USERS_FULL é uma permissão nível assinatura. Seu aplicativo não será capaz de usá-lo e até menos que ele tem a mesma assinatura que o sistema".

http://stackoverflow.com/questions/18179159/permission-denial-startactivity-asks-to-run-as-user-2-but-is-calling-from-user  http://stackoverflow.com/questions/20578474/permission-denial-this-requires-android-permission-interact-across-users-full?lq=1  http://stackoverflow.com/questions/19756727/what-do-i-do-about-this-requires-android-permission-interact-across-users-full/19756762#19756762

Mas, como o código acima parece ser utilizado por outros desenvolvedores, eu ainda estou esperando por uma solução .

Edit 2: Remover pilha não relacionada com problema.

---

Top 5 Responder

1My God @

citando http://stackoverflow.com/questions/19756727/what-do-i-do-about-this-requires-android-permission-interact-across-users-full ,

android.permission.INTERACT_ACROSS_USERS_FULL É uma permissão nível assinatura. Seu aplicativo não será capaz de usá-lo e até menos que ele tem a mesma assinatura que o sistema .

UPDATE:

Você tem o android.permission.WRITE_EXTERNAL_STORAGE ?

Este link pode ajudá-lo - http://stackoverflow.com/questions/7203668/how-permission-can-be-checked-at-runtime-without-throwing-securityexception

Your concern -

PackageManager pm = context.getPackageManager();
int hasPerm = pm.checkPermission(
    android.Manifest.permission.WRITE_EXTERNAL_STORAGE, 
    context.getPackageName());
if (hasPerm != PackageManager.PERMISSION_GRANTED) {
   // do stuff
}
2resus @

Infelizmente, o sistema não o fez :

throw any exception log the cause of the error

A exceção na minha pergunta não foi relacionado para o problema e não foi registrado em outros dispositivos.

Usamos seguinte solução que funciona em todos os dispositivos para agora para resolver o problema :

protected void startMainActivityWithWorkaround() throws NameNotFoundException, ActivityNotFoundException {
    final String packageName = getPackageName();
    final Intent launchIntent = getPackageManager().getLaunchIntentForPackage(packageName);
    if (launchIntent == null) {
      Log.e(LOG_TAG, "Launch intent is null");
    } else {
      final String mainActivity = launchIntent.getComponent().getClassName();
      Log.d(LOG_TAG, String.format("Open activity with package name %s / class name %s", packageName, mainActivity));
      final Intent intent = new Intent(Intent.ACTION_MAIN);
      intent.addCategory(Intent.CATEGORY_LAUNCHER);
      intent.setComponent(new ComponentName(packageName, mainActivity));
      // optional: intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      startActivity(intent);
    }
}
3Parthi @

É melhor usar isso em seu arquivo de manifesto

    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
4user2812818 @

Certifique-se de que você não se esqueça de adicionar uma atividade para o seu manifesto.