создайте разрешения для ограничения сторонних приложений, вызывающих активность android

У меня есть два приложения для Android, подписанные одним и тем же сертификатом. Также я использую активность одного приложения в другом приложении для Android, указав имя в теге «intent-filter». Но из-за тега «фильтр намерений» любое стороннее приложение может вызвать мою активность.

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

-Рон...


person Ron    schedule 17.08.2011    source источник


Ответы (1)


Во-первых, вы можете удалить фильтры намерений, если ваша активность не предназначена для использования другими приложениями, кроме ваших; почему бы вместо этого не использовать явное намерение? Таким образом, ваша активность не может быть создана «по ошибке», а только намеренно, например:

Intent explicitIntent = new Intent(InvokingActivity.this, InvokedActivity.class);
startActivity(explicitIntent);

Затем, чтобы даже предотвратить это извне, вы можете определить свое собственное разрешение и добавить его в свою активность; взгляните на атрибут android:protectionLevel для разрешение, значение которого может быть «подпись».

person darma    schedule 17.08.2011
comment
спасибо за ответ, я использовал тег фильтра намерений, потому что одно действие используется двумя приложениями. Также не могли бы вы опубликовать пример того, как использовать android:protectionLevel=signature для активности? - person Ron; 17.08.2011
comment
Разве эти 2 приложения не знают, что класс должен вызываться напрямую, чтобы вы могли использовать явное намерение (см. мой пример) вместо неявного (т.е. через фильтры намерения)? - person darma; 17.08.2011
comment
На самом деле, здесь проблема в том, что у меня есть общая активность входа в систему. Если я использую явное намерение, то через некоторое время, если я создам новое приложение, мне нужно будет изменить это явное намерение. Поэтому я использовал тег фильтра намерений, чтобы вызывать имя намерения только из приложений. Теперь даже я создаю новое приложение, тогда просто использование имени намерения поможет мне вызвать действие входа в систему. - person Ron; 17.08.2011
comment
Что касается использования разрешений, см. здесь: developer.android .com/guide/topics/manifest/ Вы создаете разрешение на уровне пакета с атрибутом android:protectionLevel=signature + вы объявляете его на уровне пакета с помощью тега use-permission + вы объявляете его на уровне активности с помощью android :permission атрибут действия. - person darma; 17.08.2011
comment
добавляя к приведенному выше комментарию, я думаю, что явное намерение будет вызываться только из того же пакета. Но два моих приложения разрабатываются как два разных пакета, и я не хочу испортить оба, добавив ссылки. Можно ли применить android:protectionLevel из тега фильтра намерений? Я думаю, если это возможно, то я получу решение. - person Ron; 17.08.2011
comment
По идее да, это должно работать, но см. мой предыдущий комментарий об использовании тегов и атрибутов в пользовательском разрешении. - person darma; 17.08.2011
comment
Круто, твой последний комментарий поможет мне справиться с этой проблемой. Я искал этот тег android:permission. Большое спасибо. - person Ron; 17.08.2011
comment
@darma Я сделал то же самое, но теперь не могу запустить свою деятельность через прикосновение. Он запускается только в том случае, если я запускаю приложение для Android через eclipse. - person parul; 10.12.2014