安卓App自启动,两种不同的方式!!!支持到安卓4.4

这篇具有很好参考价值的文章主要介绍了安卓App自启动,两种不同的方式!!!支持到安卓4.4。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

初衷

自己给车机买了CarPlay盒子,但是车机启动后需要点击App才能使用,十分拉闸!!!所以做了这个自启动器。

README!

因为
它是apk文件
它是基于安卓4.4开发的

所以
它能安装到所有的安卓平台上
它只能安装到安卓4.4以后的机子上

开发

开机程序自启代码【主要在AndroidManifest.xml】

// An highlighted block
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="internalOnly"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <!--    悬浮窗-->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApplication"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.APP_MAPS"/>
                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>

            <meta-data
                android:name="android.app.lib_name"
                android:value="" />
        </activity>
        <receiver
            android:name=".BaseReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="1000">
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

主要的逻辑代码

//展示包名
        try {
            Context ctx = MainActivity.this;
            PackageManager packageManager = ctx.getPackageManager();
            //获取所有安装的app
            List<PackageInfo> installedPackages = packageManager.getInstalledPackages(0);
            ArrayList<String> listItem = new ArrayList<String>();
            for(PackageInfo info : installedPackages){
                String packageName = info.packageName;//app包名
                ApplicationInfo ai = packageManager.getApplicationInfo(packageName, 0);
                String appName = (String) packageManager.getApplicationLabel(ai);//获取应用名称
                String showItem = appName + "____" + packageName;
                listItem.add(showItem);
            }
            ArrayAdapter<String> adapter =new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listItem);

            listView.setAdapter(adapter);
            listView.setOnItemClickListener(new MyOnItemClickListener());
        }catch (Exception ex){}
        //申请悬浮窗权限
        try{
            //检查是否已经授予权限,大于6.0的系统适用,小于6.0系统默认打开,无需理会
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
                //没有权限,须要申请权限,由于是打开一个受权页面,因此拿不到返回状态的,因此建议是在onResume方法中重新执行一次校验
                Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
                intent.setData(Uri.parse("package:" + getPackageName()));
                startActivity(intent);
            }
        }catch (Exception ex){}
        //启动跳转程序
        String ss = "";
        try{
            //启动从文件中读取包名字
            Context ctx = MainActivity.this;
            SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE);
            EditText editText = findViewById(R.id.txtPackName);
            editText.setText(sp.getString("PKG", "none"));
            ss = sp.getString("PKG", "none");
        }catch (Exception ex){}
        //第一种方式启动
        try {
            if(!ss.equals("none")){
                Intent intent = getPackageManager().getLaunchIntentForPackage(ss);
                if (intent != null) {
                    intent.putExtra("type", "110");
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
                }
            }
        }
        catch(Exception ex) {}
        //第二种方式启动
        try {
            if(!ss.equals(("none"))){
                Intent intent = new Intent();
                ComponentName cn = new ComponentName(ss, ss+".MainActivity");
                intent.setComponent(cn);
                startActivity(intent);
            }
        }catch (Exception ex){}

效果

启动后调到对应的App
安卓车机自启动管理软件,平时经历,android

结语

接触Android半天,简单搞了一下的作品,大佬手下留情,望海涵!
ps:
坑是真多
1、Debug的apk安装不到车机上
2、自己的安卓车机是厂家定制的没有开机广播…所以把应用做成了桌面应用
3、Android studio竟然是全英文的,没有官方汉化…
都是泪…文章来源地址https://www.toymoban.com/news/detail-523555.html

到了这里,关于安卓App自启动,两种不同的方式!!!支持到安卓4.4的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium两种代理方式(方式二支持账号密码验证)

    https://registry.npmmirror.com/binary.html?path=chromedriver/ 以下方式均实机测试过。 方式一 无需验证,只需填写代理IP和端口号 方式二 通过生成插件并加载通过代理验证,需要填写代理IP、端口号、验证账号和密码,该方式缺点是不支持后台静默运行(headless)

    2024年02月11日
    浏览(43)
  • 安卓音视频开发(3)—— AudioTrack两种方式播放pcm音频

    前言 之前学习了AudioRecord录制pcm音频,与之对应的就是AudioTrack播放pcm音频(MediaPlayer、SoundPool有其他应用场景),它有两种数据加载模式(MODE_STATIC、MODE_STREAM)。 模式 MODE_STATIC :这种模式下,一次将所有的数据放入一个固定的buffer,然后写入到AudioTrack中,后续就不用继续

    2023年04月22日
    浏览(49)
  • win自启动jar包两种方式

    方式一 将jar包做成exe服务,可以实现自启动的方式。 方式二 将jar使用bat脚本启动,再通过vbs脚本控制bat脚本后台启动,避免黑窗口的出现,进行开启自启动。 方式一:服务模式 环境安装,电脑需要安装Microsoft.NETFramework 4,如果有的话可以不安装 下载 WinSW.NET4.exe 和 sample-

    2024年02月08日
    浏览(43)
  • Nginx配置同时支持http和https两种方式访问

    http: https: Nginx的ssl模块安装 进入到目录的sbin目录下,输入 如果出现 (configure arguments: --with-http_ssl_module), 则已安装(下面的步骤可以跳过,直接进行第五步)。 一般情况下都是不存在ssl模块的,接下来进入到你的解压缩后的nginx目录,注意这里不是nginx安装目录,是解压缩后

    2024年02月13日
    浏览(47)
  • 树莓派设置开机自启动的两种设置方式

    树莓派可通过两种方式来设置树莓派的开机自启动功能: 一、配置rc.local文件设置树莓派开机启动项 编辑/etc/rc.local文件 在文件中的 exit 0 之前添加需要执行的程序,注意要使用绝对路径,如下 特别注意,如果程序是阻塞的,则须加上     符号以在后台运行,否则系统无法启

    2023年04月20日
    浏览(68)
  • windows环境下nacos单机启动两种方式

    第一种启动方式: 进入nacos的解压目录bin下 以notepad++方式打开startup.cmd 然后修改大概在26行的set MODE=\\\"cluster\\\"为set MODE=\\\"standalone\\\"(下面配有大致图片) 然后直接点击startup.cmd命令,就启动成功了(注意查看日志\\\"nacos id starting with standalone\\\") 第二种启动方式: 在黑窗体环境下切换目录到

    2024年02月11日
    浏览(43)
  • C++中cin >> str 和 string类的getline(cin, str) 用来读取用户输入的两种不同方式的不同点

    <string>的getline()函数语法如下【https://cplusplus.com/reference/string/string/getline/】: 其中,is是输入流对象;str是目标字符串对象;delim是可选参数,表示定界符(分隔符,默认为换行符\\\'n\\\')。 使用getline()函数时,它会从输入流中读取一行文本,并将读取到的内容存储到目标字符

    2024年02月11日
    浏览(36)
  • Android不同APP之间共享数据的方式

    今天给大家介绍三种不同APP之间共享数据的方式 第一种:使用SharePreference 使用SharePreference共享数据 第二种:使用ContentProvider, 这个就不仔细讲了,大家看看其他文章吧 第三种:sharedUserId 通过SharedUser id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是

    2024年02月10日
    浏览(50)
  • Selenium手动和自动两种方式启动Chrome驱动

    要使用Selenium自动跟随自带的Chrome驱动,你需要首先确保你已经安装了Selenium库和Chrome驱动。然后,你可以按照以下步骤进行操作: 导入必要的库: 创建一个Chrome WebDriver实例: 这将自动根据系统中安装的Chrome浏览器版本使用正确的驱动程序。 使用WebDriver执行自动化操作,例

    2024年02月12日
    浏览(44)
  • uni-app中代理的两种配置方式

    方式一: 在项目的 manifest.json 文件中点击 源码视图 在最底部的vue版本下编写代理代码 方式二: 在项目中创建 vue.config.js 文件然后进行配置 在页面中发起请求  完整的url:http://c.m.163.com/recommend/getChanListNews?channel=T1457068979049size=10 总结:代理的配置是为了解决发起请求时的跨域

    2024年01月23日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包