初衷
自己给车机买了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
文章来源:https://www.toymoban.com/news/detail-523555.html
结语
接触Android半天,简单搞了一下的作品,大佬手下留情,望海涵!
ps:
坑是真多
1、Debug的apk安装不到车机上
2、自己的安卓车机是厂家定制的没有开机广播…所以把应用做成了桌面应用
3、Android studio竟然是全英文的,没有官方汉化…
都是泪…文章来源地址https://www.toymoban.com/news/detail-523555.html
到了这里,关于安卓App自启动,两种不同的方式!!!支持到安卓4.4的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!