我想要一个只能从我的应用中的某些其他活动启动的活动,而不是其他活动
目前,这有效:
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?">
但是,我想知道是否有比使用旗帜更好的解决方案?
答案 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;部分。
这会让你更接近你的目标吗?