Как использовать пользовательские разрешения в Android?

У меня два приложения.

Один из них объявляет разрешение и имеет одно действие:

Часть AndroidManifest.xml

               

Второй объявляет, что использует разрешение

Часть AndroidManifest.xml

   <application 

Часть Activity :

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("myapp://myapp.mycompany.com/index"))); } 

Я устанавливаю приложение, объявляющее разрешение, затем запускаю второе приложение.

В результате я получаю исключение безопасности:

  01-11 09:46:55.249: E/AndroidRuntime(347): java.lang.RuntimeException: Unable to start activity ComponentInfo{your.namespace2/your.namespace2.UsingPErmissionActivity}: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.VIEW dat=myapp://myapp.mycompany.com/index cmp=your.namespace/.DeclaringPermissionActivity } from ProcessRecord{407842c0 347:your.namespace2/10082} (pid=347, uid=10082) requires your.namespace.permission.TEST 

Я создал тестовый код, который вы можете использовать, и протестируйте свои разрешения. Есть два приложения PermissionTestClient, которые объявляют разрешение и защищают его деятельность с этим разрешением. Вот его файл манифеста:

                  

В файле Activity нет ничего особенного, поэтому я не буду показывать его здесь.

Приложение PermissionTestServer вызывает активность из PermissionTestClient. Вот его файл манифеста:

  

            

Активность:

 package com.testpackage.permissiontestserver; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class PermissionTestServerActivity extends Activity { private static final String TAG = "PermissionTestServerActivity"; /** Called when the activity is first created. */ Button btnTest; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnTest = (Button) findViewById(R.id.btnTest); btnTest.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.d(TAG, "Button pressed!"); Intent in = new Intent(); in.setAction("com.testpackage.permissiontestclient.MyAction"); in.addCategory("android.intent.category.DEFAULT"); startActivity(in); } }); } } 

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

Вам необходимо создать разрешение в манифесте базового приложения, объявив его исключительно. Например:

  

И позже используйте его в своем желаемом приложении как:

  

Примечание. Очень важно поддерживать порядок, в котором вы устанавливаете свои приложения с пользовательскими разрешениями. т.е. вам необходимо сначала установить это приложение, которое объявит разрешение, а затем установит тот, который его использует. Любое нарушение в этом порядке может нарушить использование обычаев. разрешения.

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

Объявление и принудительное разрешение

Как уже упоминалось в ответах, вы должны также принять во внимание порядок, в котором вы устанавливаете приложения.

это важно, потому что:

если приложение, запрашивающее разрешение (приложение B), установлено до приложения, которое определяет разрешение (приложение A), тогда не будет такого определенного разрешения на конкретном устройстве, чтобы ОС не запрашивала разрешения вообще.

позже, когда вы устанавливаете приложение A и пытаетесь запустить приложение B, последний не сможет получить доступ к защищенному компоненту.

Одним из способов решения было бы определить одно и то же пользовательское разрешение в приложениях, A и B, чтобы убедиться, что разрешение существует на устройстве, независимо от того, какое приложение установлено первым, поэтому, когда приложение A установлено, разрешение будет уже предоставляется в приложение Б.

В этом случае, однако, вы должны убедиться, что уровень защиты в обоих объявлениях одинаковый, поскольку это может привести к угрозе безопасности .

(обратите внимание, что от android 5.0 и вы не можете определить одно и то же разрешение более чем в одном приложении, за исключением случаев, когда эти приложения подписаны с тем же ключом подписи).

  • Окно оверлей системы Android
  • База данных SQLite: только для чтения
  • Разрешения Android M: onRequestPermissionsResult () не вызывается
  • Разрешения на доступ к файлам IIS AppPoolIdentity и файловой системы
  • Метод checkSelfPermission не работает в targetSdkVersion 22
  • проблема с правами на запись файла в папку «Program Files»
  • Как заставить приложение получать трансляцию, когда другие приложения установлены или удалены
  • SYSTEM_ALERT_WINDOW - как получить это разрешение автоматически на Android 6.0 и targetSdkVersion 23
  • Диалоговое окно подтверждения разрешения хоста
  • Ошибка MySQL 1449: пользователь, указанный как определитель, не существует
  • Последнее обновление по включению и отключению мобильных данных программно
  • Давайте будем гением компьютера.