初衷
自己給車(chē)機(jī)買(mǎi)了CarPlay盒子,但是車(chē)機(jī)啟動(dòng)后需要點(diǎn)擊App才能使用,十分拉閘?。?!所以做了這個(gè)自啟動(dòng)器。
README!
因?yàn)?br> 它是apk文件
它是基于安卓4.4開(kāi)發(fā)的
所以
它能安裝到所有的安卓平臺(tái)上
它只能安裝到安卓4.4以后的機(jī)子上
開(kāi)發(fā)
開(kāi)機(jī)程序自啟代碼【主要在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);//獲取應(yīng)用名稱(chēng)
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){}
//申請(qǐng)懸浮窗權(quán)限
try{
//檢查是否已經(jīng)授予權(quán)限,大于6.0的系統(tǒng)適用,小于6.0系統(tǒng)默認(rèn)打開(kāi),無(wú)需理會(huì)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
//沒(méi)有權(quán)限,須要申請(qǐng)權(quán)限,由于是打開(kāi)一個(gè)受權(quán)頁(yè)面,因此拿不到返回狀態(tài)的,因此建議是在onResume方法中重新執(zhí)行一次校驗(yàn)
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
}
}catch (Exception ex){}
//啟動(dòng)跳轉(zhuǎn)程序
String ss = "";
try{
//啟動(dòng)從文件中讀取包名字
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){}
//第一種方式啟動(dòng)
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) {}
//第二種方式啟動(dòng)
try {
if(!ss.equals(("none"))){
Intent intent = new Intent();
ComponentName cn = new ComponentName(ss, ss+".MainActivity");
intent.setComponent(cn);
startActivity(intent);
}
}catch (Exception ex){}
效果
啟動(dòng)后調(diào)到對(duì)應(yīng)的App文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-523555.html
結(jié)語(yǔ)
接觸Android半天,簡(jiǎn)單搞了一下的作品,大佬手下留情,望海涵!
ps:
坑是真多
1、Debug的apk安裝不到車(chē)機(jī)上
2、自己的安卓車(chē)機(jī)是廠家定制的沒(méi)有開(kāi)機(jī)廣播…所以把應(yīng)用做成了桌面應(yīng)用
3、Android studio竟然是全英文的,沒(méi)有官方漢化…
都是淚…文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-523555.html
到了這里,關(guān)于安卓App自啟動(dòng),兩種不同的方式?。?!支持到安卓4.4的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!