• Intent


    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" <!--可被浏览的-->
  • 相关阅读:
    jsonrpc
    第十章:多线程
    第九章:IO流
    第八章:集合
    第七章:常用类
    第六章:异常机制
    第四章:数组
    第三章:流程控制语句
    第二章:数据类型和运算符
    第五章:面向对象4
  • 原文地址:https://www.cnblogs.com/hometown/p/4631306.html
Copyright © 2020-2023  润新知