Разница между 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

0 ответов

Другие вопросы по тегам