1、为了layout界面代码重用,在styles.xml中加入自定义样式
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="MyStyle"> <!-- 我定义的按钮样式 -->
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_marginLeft">4dp</item>
<item name="android:layout_marginStart">4dp</item>
<item name="android:layout_marginTop">4dp</item>
<item name="android:textColor">#FF5722</item>
<item name="android:background">#8BC34A</item>
</style>
</resources>
2、主界面button.xml中添加按钮
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow>
<Button
style="@style/MyStyle"
android:onClick="click_Web"
android:text="1调web浏览器 " />
<Button
style="@style/MyStyle"
android:onClick="click_Geo"
android:text="2调地图" />
</TableRow>
<TableRow>
<Button
style="@style/MyStyle"
android:onClick="click_DiaL"
android:text="3调拨打电话界面" />
<Button
style="@style/MyStyle"
android:onClick="click_Call"
android:text="4直接拨打电话" />
</TableRow>
<TableRow>
<!--click_Delete click_Added-->
<Button
style="@style/MyStyle"
android:onClick="uninstallClick"
android:text="5卸载" />
<Button
style="@style/MyStyle"
android:onClick="installClick"
android:text="6安装" />
</TableRow>
<TableRow>
<Button
style="@style/MyStyle"
android:onClick="click_SenTo"
android:text="7调用发邮件" />
<Button
style="@style/MyStyle"
android:onClick="click_Sms"
android:text="8发短信" />
</TableRow>
</TableLayout>
3、MainActivity.java代码中添加各按钮响应事件
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.button);
}
public void click_Web(View v) {// 1 打开百度
Intent intent = new Intent(); // 设置动作为 android.intent.action.VIEW
intent.setAction("android.intent.action.VIEW"); // 设置要打开的网址
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
public void click_Geo(View v) {// 2 地图
Intent intent = new Intent(); // 设置动作为 android.intent.action.VIEW
intent.setAction("android.intent.action.VIEW"); // 设置要打开的网址
intent.setData(Uri.parse("geo:38.899533,-77.036476"));
startActivity(intent);
}
public void click_DiaL(View v) { // 3 调拨打电话界面
Uri telUri = Uri.parse("tel:100861");
Intent intent = new Intent(Intent.ACTION_DIAL, telUri);
startActivity(intent);
}
public void click_Call(View v) { // 4 直接拨打电话
Uri telUri = Uri.parse("tel:100861");
Intent intent = new Intent(Intent.ACTION_CALL, telUri);
//向用户请求获得打电话的权限
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
startActivity(intent);
}
}
public void uninstallClick(View v){ // 5 卸载软件页面
Uri uri = Uri.fromParts("package", "com.example.ch3_activity", null);
Intent it = new Intent(Intent.ACTION_DELETE, uri);
it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(it);
}
public void installClick(View v){ // 6 安装软件页面
Intent intent=new Intent(Intent.ACTION_VIEW);
String filePath="/sdcard/Download/app-release.apk";
File file=new File(filePath);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
//判读版本是否在7.0以上
if (Build.VERSION.SDK_INT >= 24) {
Log.v(TAG,"7.0以上,正在安装apk...");
//provider authorities
Uri apkUri = FileProvider.getUriForFile(this, "com.example.ch3_activity.fileprovider", file);
//Granting Temporary Permissions to a URI
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
} else {
Log.v(TAG,"7.0以下,正在安装apk...");
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
}
this.startActivity(intent);
}
public void click_SenTo(View v) { //7 调用发邮件
Uri emailUri = Uri.parse("mailto:[email protected]");
Intent intent = new Intent(Intent.ACTION_SENDTO, emailUri);
startActivity(intent);
}
public void click_Sms(View v) { //8 发短信
Log.v("activity传数据测试", "点击了【button_sms】");
String phoneNumber = "100861";
String message = "22222";
Intent intent2 = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:" + phoneNumber));
intent2.putExtra("sms_body", message);
startActivity(intent2);
}
}
4、主界面的java代码标红,这是因为拨打电话,需要添加Permission权限
在Android Studio中添加Permission权限只能在AndroidManifest.xml中手动添加; 添加位置:在<manifest之后,<application之前。然后还要在同样的位置添加安装和卸载的权限
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
在后前添加安装的相关处理(用于隐式意图)
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.example.ch3_activity.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
注意
file_paths.xml
<?xml version ="1.0" encoding ="utf-8"?><!-- Learn More about how to use App Actions: https://developer.android.com/guide/actions/index.html -->
<resources>
<paths>
<external-path
name="/download"
path="Download"/>
</paths>
</resources>
在模拟器里面导入安装的apk
打开模拟器->文件->下载可以看到导入的apk
然后打开模拟器的权限:设置->应用和通知->应用信息->找到自己的应用->权限->打开
测试结果,点击按钮都可以实现
主页面