Android защищен Activity как внутренний класс - PullRequest
0 голосов
/ 13 мая 2011

Я хочу иметь действие, которое можно запустить только из определенных других активностей в моем приложении, но не из других

На данный момент это работает:

public abstract class Launcher extends Activity {

protected static boolean flag = true;

protected abstract void Launch();

public static class myPrivateActivity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(flag)
            finish();
        setContentView(R.layout.main);


    }

}

}

public class SpecialActivity extends Launcher {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.newlayout);
}   

@Override
protected void Launch {

    flag = false;

    Intent i = new Intent(Intent.ACTION_VIEW);
    String name = myPrivateActivity.class.getName();
    i.setClassName(this, name );
    startActivity(i);

    //finish();

}

}

и в манифесте Android

<activity android:name=".Launcher$myPrivateActivity"
android:label="Private?">

Тем не менее, я хотел бы знать, есть ли лучшее решение, чем просто использование флага?

Ответы [ 2 ]

1 голос
/ 13 мая 2011

Это творческий подход.Я не думаю, что когда-либо видел подобное раньше.

Однако я не думаю, что это достигает того, чего вы пытаетесь достичь.Если бы такой подход был принят, то, вероятно, было бы целесообразно еще больше «укрепить» его, сделав абстрактный базовый класс и его внутренний статический пакет закрытым, а любые конкретные публичные подклассы - окончательными.С этими изменениями, я не думаю, что флаг больше обеспечит какую-либо защиту.

Однако (опять же), имейте в виду, что модель разрешений Android предусматривает настраиваемые разрешения и может использоваться для достижениячто я думаю ты хочешь сделать.Фактически, документ по адресу http://developer.android.com/guide/topics/security/security.html описывает, как «применять ваши собственные разрешения» для настройки «приложения, которое хочет контролировать, кто может запускать одно из его действий» в разделе «Объявление и применение разрешений».

Это приближает тебя к цели?

1 голос
/ 13 мая 2011

Я думаю, вы можете использовать это:

Android: разрешение

Имя разрешения, которое клиенты должны иметь для запуска действия или иным образом, чтобы оно отвечало намерению. Если вызывающей функции startActivity () или startActivityForResult () не было предоставлено указанное разрешение, его намерение не будет доставлено действию. Если этот атрибут не установлен, разрешение, установленное атрибутом разрешения элемента, применяется к действию. Если ни один из атрибутов не установлен, действие не защищено разрешением.

http://developer.android.com/guide/topics/manifest/activity-element.html#prmsn

...