我只是在玩某种应用程序间通信的场景, 并试图绕过Android中应用程序主要活动的问题 不能通过自定义审判来保证(因为在这种情况下它根本无法启动)。
我尝试使用两个活动:1)未受保护的主要活动。
2)单击按钮时,主活动会发送显式Intent以启动第二个活动。
那个人执行一些敏感工作并受自定义权限保护
( “toy.test.permission.ACTIVATE_SECOND_ACTIVITY”)。
这个想法是,如果主要活动是由用户从启动器启动或
通过使用明确意图的外国恶意应用程序,我们可以在用户按下按钮之前警告用户。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
final Button start = (Button) findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent activateIntent = new Intent(MainActivity.this,
SecondActivity.class);
startActivity(activateIntent);
finish();
}
}); ....
Manifest.xml文件如下所示:
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SecondActivity"
android:label="@string/second_activity_name"
android:theme="@style/AppTheme"
android:permission="toy.test.permission.ACTIVATE_SECOND_ACTIVITY" >
<intent-filter>
<action android:name="toy.test.action.ACTIVATE_SECOND_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
(此外,可以通过隐式Intent从友元应用程序启动SecondActivity actionString =“toy.test.action.ACTIVATE_SECOND_ACTIVITY”使用权限 “toy.test.permission.ACTIVATE_SECOND_ACTIVITY”。)
在Android 4.2设备或模拟器上,可以通过单击从MainActivity启动SecondActivity 虽然应用程序没有明确要求权限,但“开始”按钮没有任何问题 “toy.test.permission.ACTIVATE_SECOND_ACTIVITY”。
但是,在Android 2.3.3仿真器上,由于SecurityException,无法启动SecondActivity:
FATAL EXCEPTION: main
java.lang.SecurityException: Permission Denial: starting Intent { cmp=toy.test/.SecondActivity }
from ProcessRecord{406827d0 405:toy.test/10034} (pid=405, uid=10034) requires
toy.test.permission.ACTIVATE_SECOND_ACTIVITY
我很困惑:两个Android版本之间的权限实施是否发生了变化? 是否故意Android 4.2允许这样的情况,即未经许可激活SecondActivity? (当然,那会很有用。)
非常感谢任何答案, puffin137