【问题标题】:Android protected Activity as inner classAndroid 受保护的 Activity 作为内部类
【发布时间】:2011-05-13 16:51:27
【问题描述】:

我想要一个只能从我的应用中的某些其他活动启动的活动,而不能从其他活动启动

目前,这是可行的:

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 inheritance android-activity inner-classes


    【解决方案1】:

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

    但是,我认为它无法完成您想要完成的任务。如果采用这样的方法,那么通过将抽象基类及其内部静态类包设为私有以及任何具体的公共子类为 final 来进一步“强化”它可能是有意义的。通过这些更改,我认为该标志将不再提供任何形式的保护。

    但是(再次)请注意,Android 的权限模型提供了自定义权限,并且可能用于实现我认为您想要做的事情。事实上,http://developer.android.com/guide/topics/security/security.html 的文档在“声明和执行权限”部分描述了如何“强制执行您自己的权限”来配置“想要控制谁可以启动其活动的应用程序”。

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

    【讨论】:

      【解决方案2】:

      我认为你可以使用这个:

      android:权限

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

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

      【讨论】:

        猜你喜欢
        • 2013-04-08
        • 2011-01-23
        • 2012-03-27
        • 2014-02-11
        • 1970-01-01
        • 2011-08-04
        • 2011-01-02
        • 2012-09-21
        • 1970-01-01
        相关资源
        最近更新 更多