作为内部类的Android保护活动

作为内部类的Android保护活动,android,inheritance,android-activity,inner-classes,Android,Inheritance,Android Activity,Inner Classes,我希望有一个活动只能从我应用程序中的某些其他活动启动,而不能从其他活动启动 目前,这是可行的: public abstract class Launcher extends Activity { protected static boolean flag = true; protected abstract void Launch(); public static class myPrivateActivity extends Activity { /** Called when

我希望有一个活动只能从我应用程序中的某些其他活动启动,而不能从其他活动启动

目前,这是可行的:

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?">


但是,我想知道是否有比使用标志更好的解决方案?

我认为您可以使用以下方法:

android:permission

客户端启动活动或以其他方式使其响应意图所必须的权限的名称。如果startActivity()或startActivityForResult()的调用方未被授予指定的权限,则其意图将不会传递给活动。 如果未设置此属性,则元素的权限属性设置的权限将应用于活动。如果未设置任何属性,则该活动不受权限保护


这是一种创造性的方法。我想我以前从未见过这样的事情

然而,我不认为它能实现你想要实现的目标。如果采取这样的方法,那么通过使抽象基类及其内部静态类包私有化,以及任何具体的公共子类最终化,进一步“强化”抽象基类可能是有意义的。有了这些变化,我认为国旗将不再提供任何形式的保护

但是(再一次),请注意Android的权限模型提供了自定义权限,并且可能用于实现我认为您想要做的事情。事实上,位于的文档描述了如何在“声明和强制权限”部分中“强制您自己的权限”,以配置“希望控制谁可以启动其活动的应用程序”

这会让你更接近你的目标吗