开发小米安卓应用打开指定Web应用的完整指南

下面我将提供详细的步骤和完整代码,开发一个在小米(或其他安卓)设备上运行的简单应用,功能是打开指定的Web应用。

方案一:使用系统浏览器打开(最简单)

1. 创建新项目

  1. 打开Android Studio
  2. 选择"File" > “New” > “New Project”
  3. 选择"Empty Activity"模板
  4. 设置项目名称如"WebLauncher",包名如"com.example.weblauncher"
  5. 选择语言为Java或Kotlin(本示例使用Java)
  6. 选择最小SDK版本(API 21或更高)

2. 修改MainActivity.java

package com.example.weblauncher;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // 设置要打开的Web应用URL
        String webAppUrl = "https://webapp.example.com";
        
        // 创建Intent打开默认浏览器
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(webAppUrl));
        startActivity(browserIntent);
        
        // 关闭当前Activity
        finish();
    }
}

3. 修改AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.weblauncher">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

方案二:使用WebView内嵌Web应用(更专业)

1. 修改activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="4dp"
        android:visibility="gone" />

</LinearLayout>

2. 修改MainActivity.java

package com.example.weblauncher;

import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private WebView webView;
    private ProgressBar progressBar;

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

        webView = findViewById(R.id.webView);
        progressBar = findViewById(R.id.progressBar);

        // 配置WebView
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true); // 启用JavaScript
        webSettings.setDomStorageEnabled(true); // 启用DOM存储
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setUseWideViewPort(true);

        // 设置WebView客户端
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

        // 添加进度条支持
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                if (newProgress < 100) {
                    progressBar.setVisibility(ProgressBar.VISIBLE);
                    progressBar.setProgress(newProgress);
                } else {
                    progressBar.setVisibility(ProgressBar.GONE);
                }
            }
        });

        // 加载Web应用
        webView.loadUrl("https://webapp.example.com");
    }

    // 处理返回按钮
    @Override
    public void onBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack();
        } else {
            super.onBackPressed();
        }
    }
}

3. 修改AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.weblauncher">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true">
        
        <activity
            android:name=".MainActivity"
            android:configChanges="orientation|screenSize"
            android:windowSoftInputMode="adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

4. 添加网络安全配置(针对Android 9+)

  1. 在res/xml目录下创建network_security_config.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">webapp.example.com</domain>
    </domain-config>
</network-security-config>
  1. 在AndroidManifest.xml的application标签中添加:
android:networkSecurityConfig="@xml/network_security_config"

小米设备特别注意事项

  1. 自启动管理:在小米设备上,确保用户允许你的应用自启动,否则可能会被系统限制后台运行

  2. 电池优化

    • 在代码中添加请求忽略电池优化的逻辑:
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        Intent intent = new Intent();
        String packageName = getPackageName();
        PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
        if (!pm.isIgnoringBatteryOptimizations(packageName)) {
            intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
            intent.setData(Uri.parse("package:" + packageName));
            startActivity(intent);
        }
    }
    
  3. 权限管理:小米的MIUI系统有更严格的权限管理,确保用户授予了所有必要权限

构建和测试

  1. 连接小米设备并启用USB调试模式
  2. 在Android Studio中点击"Run"按钮
  3. 选择你的小米设备进行安装和测试

进阶功能建议

  1. 添加离线支持:使用Service Worker缓存Web应用资源
  2. 添加推送通知:集成Firebase Cloud Messaging
  3. 添加快捷方式:创建桌面快捷方式直接打开特定页面
  4. 添加自定义错误页面:处理网络不可用情况

这个完整的实现可以直接在小米设备上运行,提供了比简单浏览器打开更好的用户体验,同时保持了Web应用的完整功能。

在这里插入图片描述

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐