Разница между Android 2.3.3 и Android 4.2 принудительного разрешения?
Я просто играю с определенным сценарием взаимодействия между приложениями и пытаюсь обойти проблему, заключающуюся в том, что в Android основная активность приложения не может быть защищена пользовательским разрешением (так как в этом случае его нельзя запустить совсем).
Вместо этого я попытался использовать два вида деятельности: 1) Основной вид деятельности, который не защищен.
2) При нажатии кнопки основное действие отправляет явное намерение начать второе действие. Тот выполняет некоторую чувствительную работу и защищен пользовательским разрешением ("toy.test.permission.ACTIVATE_SECOND_ACTIVITY").
Идея заключается в том, что если основное действие запускается пользователем из модуля запуска или из-за чужого вредоносного приложения с явным намерением, мы можем предупредить пользователя, прежде чем он нажмет кнопку, чтобы продолжить.
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
final Button start = (Button) findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent activateIntent = new Intent(MainActivity.this,
SecondActivity.class);
startActivity(activateIntent);
finish();
}
}); ....
Файл Manifest.xml выглядит так:
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SecondActivity"
android:label="@string/second_activity_name"
android:theme="@style/AppTheme"
android:permission="toy.test.permission.ACTIVATE_SECOND_ACTIVITY" >
<intent-filter>
<action android:name="toy.test.action.ACTIVATE_SECOND_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
(Кроме того, SecondActivity может быть запущено из приложения-друга неявным намерением с actionString="toy.test.action.ACTIVATE_SECOND_ACTIVITY" с использованием разрешения "toy.test.permission.ACTIVATE_SECOND_ACTIVITY".)
Теперь разница между Android 2.3.3 и Android 4.2:
На устройстве или эмуляторе Android 4.2 SecondActivity можно запустить из MainActivity, нажав кнопку "Пуск" без проблем, хотя приложение не запрашивает явно разрешение "toy.test.permission.ACTIVATE_SECOND_ACTIVITY".
Однако на эмуляторе Android 2.3.3 SecondActivity не может быть запущена из-за SecurityException:
FATAL EXCEPTION: main
java.lang.SecurityException: Permission Denial: starting Intent { cmp=toy.test/.SecondActivity }
from ProcessRecord{406827d0 405:toy.test/10034} (pid=405, uid=10034) requires
toy.test.permission.ACTIVATE_SECOND_ACTIVITY
Я в замешательстве: было ли изменено разрешение доступа между двумя версиями Android? И нарочно ли андроид 4.2 разрешает такие ситуации, то есть активацию SecondActivity без разрешения? (Конечно, это было бы полезно.)
Большое спасибо за любые ответы, puffin137