java.lang.SecurityException : введенное Отказ ; это требует android.permission.INTERACT_ACROSS_USERS_FULL

? resus @ | Original: StackOverFlow
---

В моем приложении мне нужно, чтобы начатьОсновная деятельность следующим образом, как описано в нескольких других потоков на SO :

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

Выше строка кода в моей Android библиотеки проекта, я не знаю, на этом месте класс моего основного вида деятельности.

Это работает как шарм при развертывании приложения корыта интерфейс USB на тестовых устройств, но эта ошибка возникает при установке приложения с Google Play на 4,3 устройств.

Кто-то испытал ту же самую проблему?

Изменить: Я не упомянул, что несколько потоков в столь отметить, что " android.permission.INTERACT_ACROSS_USERS_FULL являетсяразрешение уровень подпись . Ваше приложение не сможет не использовать его до тех пор, пока она не имеет ту же сигнатуру, что системы".

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

Но, каквыше код, кажется, используется другими разработчиками, я все еще надеясь на решение.

Изменить 2 : Удалить стек, не связанную с проблемой.

---

Top 5 ответ

1My God @

Цитируя http://stackoverflow.com/questions/19756727/what-do-i-do-about-this-requires-android-permission-interact-across-users-full ,

android.permission.INTERACT_ACROSS_USERS_FULL Являетсяразрешение уровень подпись . Ваше приложение не сможет не использовать его до тех пор, пока она не имеет ту же подпись, как и система .

UPDATE:

У вас естьandroid.permission.WRITE_EXTERNAL_STORAGE ?

Эта ссылка может помочь вам - 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 @

К сожалению, система не сделал :

throw any exception log the cause of the error

Исключение в моем вопросе не было связано с проблемой и не было зарегистрировано на других устройствах.

Мы использовали следующие обходные пути, который работает на всех устройствах на данный момент, чтобы решить проблему :

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 @

Лучше использовать это в вашем файле манифеста

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

Убедитесь, что вы не забудьте добавить действие к вашему манифесте.