您的位置:首页 > 其它

Intent

2015-07-08 20:52 162 查看
1.隐式Intent

通过隐式Intent可以在不知道类名称的情况下 也能调用相关应用,也可以跨应用调用。

首先创建一个新的Activity,然后将视图与Activity绑定。在AndroidMenifest文件中对Activity进行注册。

默认是跨应用的,如果不跨应用,需对注册时的android:exported 进行处理。

分别如下:

public class MyAty extends Activity {

//供其他调用的字符串,要同注册在AndroidMenifest.xml文件中的action -name相同。
public static final String ACTION="com.example.ru.intenttest.intent.action.MyAty";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actyvity_my); //将视图与Activity绑定
}
}


<activity android:name=".MyAty" android:exported="false">
<intent-filter>
<category android:name="android.intent.category.DEFAULT"></category>
<action android:name="com.example.ru.intenttest.intent.action.MyAty"></action>
</intent-filter>
</activity>


调用方式与显示Intent不同,

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

findViewById(R.id.btnStart).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// startActivity(new Intent(MainActivity.this,MyAty.class));//显式Intent
startActivity(new Intent(MyAty.ACTION));   //隐式Intent
}
});
}


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

findViewById(R.id.btnStartOther).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
startActivity(new Intent("com.example.ru.intenttest.intent.action.MyAty"));//跨应用,隐式调用
}
catch (Exception e)
{
Toast.makeText(MainActivity.this,"No open",Toast.LENGTH_SHORT).show();//一定要show出来,(这是没权限时的提示)
}
}
});
}


2.Intent过滤器的相关

如果AndroidMenifest中有两个或多个相同的action android:name,则会出现选择的情况,如下:

<activity
android:name=".MyAty"
android:label="myaty">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="com.example.ru.intenttest.intent.action.MyAty" />
</intent-filter>
</activity>
<activity
android:name=".MyActivity2Activity"
android:label="@string/title_activity_my_activity2" >
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="com.example.ru.intenttest.intent.action.MyAty" />
</intent-filter>
</activity>




这个时候该怎么选择呢,可以通过在一个配置的时候添加一个:

<activity
android:name=".MyActivity2Activity"
android:label="@string/title_activity_my_activity2" >
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="com.example.ru.intenttest.intent.action.MyAty" />
<data android:scheme="rxmapp"></data> <!--给schema赋个自己写的值-->
</intent-filter>
</activity>


调用的时候代码为:startActivity(new Intent("com.example.ru.intenttest.intent.action.MyAty", Uri.parse("rxmapp://123")));。就显示这个默认的Activity了。

3,。如果是浏览器可以浏览则需配置

<category android:name="android.intent.category.BROWSABLE" <!--可被浏览的-->
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: