Android之启动activity

一、简介

1.activity显式启动
2.activity隐式启动

二、activity显式启动

(1)不带返回启动

不带返回的启动比较简单,直接new一个Intent,然后调用startActivity,我就不多赘述了,直接上代码

不带返回启动代码示例:

Intent intent=new Intent(AActivity.this,BActivity.class);
startActivity(intent);

(2)带返回的启动

带返回需要重写onActivityResult()方法,启动时要用startActivityForResult()方法,当被启动的 activity被finish()的时候,就会回调onActivityResult()方法把数据带回来。

带返回代码示例:

第一个Activity(布局就一个Button)

//启动一个Activity,传递两个数求和后返回结果
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_SUM=1;//请求码
private static final int RESULT_SUM=2;//结果码
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
    public void click(View view){
        Intent intent=new Intent(this,BActivity.class);
        intent.putExtra("a",5);
        intent.putExtra("b",6);
        startActivityForResult(intent,REQUEST_SUM);    //带返回的启动,REQUEST_SUM为请求码
    }
    public void onActivityResult(int requestCode, int resultCode, Intent data) { //当被调Activityfinish()的时候被调
        if(requestCode==REQUEST_SUM&&resultCode==RESULT_SUM)//判断请求码和结果码
        {
            int c=data.getIntExtra("c",0);
            Toast.makeText(getApplicationContext(),c+"",Toast.LENGTH_LONG).show();
        }
        super.onActivityResult(requestCode, resultCode, data);

    }
}

第二个Activity

public class BActivity extends AppCompatActivity {
    private static final int RESULT_SUM=2;//结果码
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);
        Intent intent=getIntent();//获取传过来的intent
        int a=intent.getIntExtra("a",0);//获取数据
        int b=intent.getIntExtra("b",0);
        int c=a+b;
        Intent intent1=new Intent();//新建一个intent,放入数据
        intent.putExtra("c",c);
        setResult(RESULT_SUM,intent);//放入结果
        finish();
    }
}

三、隐式启动Activity

隐式启动不需要具体指明打开哪一个Activity,只要满足action、category等条件就可以打开,被打开的Activity需要配置intent-filter、action、category等属性,当不需要填category的时候要把category属性设置为android.intent.category.DEFALULT。

代码示例:

//本次通过隐式启动拨打电话
//注:Android6.0以后有些权限需要动态申请,既要在manifest。xml文件中声明还要在代码中申请
public class MainActivity extends AppCompatActivity {

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


    }
    public void click(View v){
        if(ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
               // 动态申请打电话的权限  
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE},1);
        }else {
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_CALL);//设置action
            Uri uri = Uri.parse("tel:" + 1354682621);//设置要拨打的电话
            intent.setData(uri);
            MainActivity.this.startActivity(intent);
        }
    }
}

你可能感兴趣的:(Android之启动activity)