Android保护Activity作为内部类

时间:2011-05-13 16:51:28

标签: 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 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 个答案:

答案 0 :(得分:1)

我认为你可以使用它:

<强>机器人:权限

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

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

答案 1 :(得分:1)

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

然而,我并不认为它能完成你想要完成的任务。如果采取这样的方法,那么“硬化”可能是有意义的。它进一步使抽象基类及其内部静态类包为private,以及任何具体的公共子类final。有了这些变化,我就不会认为国旗会再提供任何形式的保护。

然而(再次),请注意Android的权限模型提供自定义权限,并可用于实现我认为您想要做的事情。实际上,http://developer.android.com/guide/topics/security/security.html处的文档描述了如何强制执行您自己的权限&#34;配置&#34;一个想要控制谁可以开始其活动的应用程序&#34;在&#34;声明和执行权限&#34;部分。

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