2011-05-13 40 views
0

我想有一個可以只從其他特定activites在我的應用程序推出的活動,而不是從別人Android的保護活動作爲內部類

目前,這個工程:

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

不過,我想知道,如果與使用國旗相比,re是更好的解決方案嗎?

回答

1

這是一個創造性的方法。我認爲我以前從未見過類似的東西。

但是,我不認爲它完成了你要完成的任務。如果採取這樣的方法,那麼通過使抽象基類及其內部靜態類包私有化,以及任何具體的公共子類最終進行「硬化」它可能是有意義的。有了這些改變,我認爲國旗不會再提供任何形式的保護。

但是(再次),請注意,Android的權限模型提供了自定義權限,並可能用於實現我認爲您想要執行的操作。實際上,文檔http://developer.android.com/guide/topics/security/security.html描述瞭如何「強制自己的權限」來配置「希望控制誰可以開始其活動之一的應用程序」的「聲明和執行權限」部分。

這會讓你更接近你的目標嗎?

1

我認爲你可以這樣做:

安卓權限

客戶端必須要推出的活動或以其他方式得到它的一個意圖響應許可的名稱。如果startActivity()或startActivityForResult()的調用者尚未被授予指定權限,則其意圖不會被傳遞給該活動。 如果未設置此屬性,則由該元素的權限屬性設置的權限將應用於該活動。如果兩個屬性均未設置,則該活動不受權限保護。

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

相關問題