日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android在一個(gè)app中安裝并卸載另一個(gè)app的示例代碼

瀏覽:61日期:2022-09-20 16:53:49

Android在一個(gè)app中安裝并卸載另一個(gè)app

1.在app→src→main下新建文件夾asserts,將準(zhǔn)備安裝的apk文件放在asserts內(nèi)

2.在app→src→main→res下新建文件夾xml,右擊xml文件夾,選擇new→XML Resource File,F(xiàn)ile name為文件名,可隨意,本文中為filepaths;Root element為資源類型,輸入paths,確定并編輯以下代碼:

<?xml version='1.0' encoding='utf-8'?><paths xmlns:android='http://schemas.android.com/apk/res/android'> <external-path name='external_files' path='.'/></paths>

3.編輯AndroidManifest.xml

<?xml version='1.0' encoding='utf-8'?><manifest xmlns:android='http://schemas.android.com/apk/res/android' xmlns:tools='http://schemas.android.com/tools' package='com.example.myapplication'> <uses-permission android:name='android.permission.WRITE_EXTERNAL_STORAGE'/> <uses-permission android:name='android.permission.READ_EXTERNAL_STORAGE'/> <application android:allowBackup='true' android:icon='@mipmap/ic_launcher' android:label='@string/app_name' android:roundIcon='@mipmap/ic_launcher_round' android:supportsRtl='true' android:requestLegacyExternalStorage='true' android:theme='@style/Theme.MyApplication'> <provider android:name='androidx.core.content.FileProvider' android:authorities='包名' android:exported='false' android:grantUriPermissions='true'> <meta-data android:name='android.support.FILE_PROVIDER_PATHS' android:resource='@xml/filepaths步驟2中的文件' /> </provider> <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>

4.MainActivity.java

public class MainActivity extends AppCompatActivity { Context mContext; private Button bt,bt0; private TextView tx; public static boolean isGrantExternalRW(Activity activity) { //權(quán)限判定 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && activity.checkSelfPermission( Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { activity.requestPermissions(new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 1); return false; } return true; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = this; tx=findViewById(R.id.text); bt=findViewById(R.id.button);//安裝 bt0=findViewById(R.id.button0);//卸載// Toast.makeText(this, ''+Environment.getExternalStorageDirectory().getAbsolutePath(), 0).show(); if(!this.isGrantExternalRW(MainActivity.this)){return;}//判斷是否有權(quán)限修改,這很重要 else{ if(copyApkFromAssets(this, 'app-debug.apk', Environment.getExternalStorageDirectory().getAbsolutePath()+'/app-debug.apk')){ bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new AlertDialog.Builder(mContext) .setIcon(R.drawable.ic_launcher) .setMessage('是否安裝?') .setPositiveButton('yes', new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// intent.setDataAndType(Uri.parse('file://' + Environment.getExternalStorageDirectory().getAbsolutePath()+'/app-debug.apk'),// 'application/vnd.android.package-archive'); File apkFile = new File(Environment.getExternalStorageDirectory()+'/app-debug.apk'); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); Uri uri = FileProvider.getUriForFile(MainActivity.this, 'com.example.myapplication', apkFile); intent.setDataAndType(uri, 'application/vnd.android.package-archive'); } else { intent.setDataAndType(Uri.fromFile(apkFile), 'application/vnd.android.package-archive'); } mContext.startActivity(intent);} }).show(); } }); bt0.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Uri packageURI = Uri.parse('package:com.example.a22');//package:+想要卸載的包名 Intent intent =new Intent(Intent.ACTION_DELETE); intent.setData(packageURI); mContext.startActivity(intent); } }); } }} public boolean copyApkFromAssets(Context context, String fileName, String path) { //將asserts中的apk文件復(fù)制到手機(jī)存儲(chǔ)中 //可以從手機(jī)存儲(chǔ)劃到最下面,是單獨(dú)的文件,沒有設(shè)置文件夾 boolean copyIsFinish = false; try { InputStream is = context.getAssets().open(fileName); File file = new File(path); file.createNewFile(); FileOutputStream fos = new FileOutputStream(file); int length = is.available(); byte[] temp = new byte[length]; int i = 0; while ((i = is.read(temp)) > 0) { fos.write(temp, 0, i); } fos.close(); is.close(); copyIsFinish = true; } catch (IOException e) { e.printStackTrace(); } return copyIsFinish; }}

網(wǎng)絡(luò)上的教程有很多自相矛盾,本人防止權(quán)限出錯(cuò),把能加的權(quán)限都設(shè)置了一遍,有空可以選擇測(cè)試一下,應(yīng)該有的可以刪掉

到此這篇關(guān)于Android在一個(gè)app中安裝并卸載另一個(gè)app的示例代碼的文章就介紹到這了,更多相關(guān)Android app 安裝卸載內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩激情视频网站| 人人精品人人爱| 日韩中文在线播放| 亚洲专区一区| 国产日韩在线观看视频| 麻豆国产精品| 精品日韩视频| 亚洲精品高潮| 精品视频网站| 亚洲免费高清| 国产精品亚洲片在线播放| 丁香婷婷久久| 亚洲欧美日韩国产一区二区| 欧美一区不卡| 日韩中文影院| 亚洲一区网站| 国产精品xxx在线观看| 日韩在线观看| 在线看片日韩| 欧美一级鲁丝片| 久久国产精品亚洲77777| 国产美女视频一区二区| 欧美高清一区| 国产亚洲久久| 偷拍欧美精品| 麻豆久久久久久| 不卡视频在线| 欧美在线看片| 黄页网站一区| 国产精久久久| 红桃视频国产精品| 精品国产欧美日韩| 亚洲精品欧美| 99视频精品全国免费| 日本麻豆一区二区三区视频| 老牛影视精品| 日本91福利区| 91精品成人| 国产欧美高清| 日韩精品一级中文字幕精品视频免费观看| 久久精品国内一区二区三区| 亚洲欧美日韩一区在线观看| 国产精品高清一区二区| 视频一区二区三区在线| 欧洲av不卡| 日韩不卡一二三区| 红桃视频国产一区| 黄色aa久久| 欧美天堂在线| 久久亚洲一区| 欧美亚洲国产一区| 精品99在线| 欧美日韩亚洲三区| 蜜桃一区二区三区在线观看| 日韩在线欧美| 欧美日韩四区| 夜夜嗨av一区二区三区网站四季av| 欧美日韩一区二区三区不卡视频 | 在线国产一区二区| 欧美激情日韩| 久久久国产精品一区二区中文| 欧美激情五月| 日韩精品a在线观看91| 亚洲一区国产一区| 亚洲午夜av| 樱桃视频成人在线观看| 国产精品一区二区免费福利视频 | 日韩av午夜在线观看| 在线午夜精品| 99久久99久久精品国产片果冰 | 视频一区中文字幕国产| 亚洲二区在线| 日韩精品2区| 国产福利电影在线播放| 国产精品久久久久77777丨 | 国产精品亚洲产品| 伊人久久大香伊蕉在人线观看热v| 久久精品欧美一区| 91一区二区三区四区| 精品伊人久久久| 精品不卡一区| 久久精品女人| 久久精品一区二区三区中文字幕| 国产精品视频3p| 另类国产ts人妖高潮视频| 自拍日韩欧美| 午夜免费一区| 国产99久久久国产精品成人免费| 日韩免费视频| 国产亚洲一区二区手机在线观看| а√在线中文在线新版| 精品国产精品久久一区免费式 | 国产99亚洲| 欧美一区三区| 欧美美女一区| 亚洲一区区二区| 天堂va蜜桃一区二区三区| 香蕉久久夜色精品国产| 美女精品一区| 亚洲va久久| 91精品国产自产在线丝袜啪| 日韩精品导航| 国产欧美久久一区二区三区| 欧美黑人巨大videos精品| 久久99久久人婷婷精品综合| 激情久久一区二区| 热三久草你在线| 不卡一区2区| 久久成人一区| 久久国产精品免费一区二区三区 | 美国欧美日韩国产在线播放| 日本大胆欧美人术艺术动态| 午夜一级久久| 亚洲精品一级| 欧美日韩网址| 国产成人77亚洲精品www| 日韩欧美午夜| 欧美专区18| 欧美日韩亚洲国产精品| 精品黄色一级片| 99久久精品国产亚洲精品| 亚洲主播在线| 日韩av一区二区三区| 麻豆国产精品一区二区三区 | 国产精品福利在线观看播放| 免费在线小视频| 国产一区视频在线观看免费| 亚洲欧美日本视频在线观看| 日韩av一区二区三区| 麻豆国产精品视频| 99久久99久久精品国产片果冰| 蜜桃伊人久久| 国产日产一区| 久久91导航| 亚洲三级精品| 国产精品magnet| 日韩欧美在线中字| 欧美专区在线| 久久xxx视频| 亚洲大全视频| 国产一区 二区| 色偷偷色偷偷色偷偷在线视频| 免费观看久久av| 91欧美极品| 午夜精品成人av| 亚洲午夜国产成人| 红杏一区二区三区| 欧美综合二区| 成人在线黄色| 三级在线观看一区二区| 麻豆成人av在线| 99国产一区| 欧美激情一区| 国产精品日本| 麻豆精品国产91久久久久久| 激情综合亚洲| 亚洲精品乱码久久久久久蜜桃麻豆| 国产人成精品一区二区三| 免费在线小视频| 日本色综合中文字幕| 久久久久中文| 国产精品最新| 99国内精品| 国产精品久久久久久久久妇女| 免费视频久久| 国产不卡精品在线| 亚洲精品进入| 91精品亚洲| 欧美激情日韩| 亚洲日韩中文字幕一区| 日韩欧美一区二区三区免费观看| 亚洲精品影视| 久久久久久久久99精品大| 欧美精品影院| 亚洲一区二区三区免费在线观看| 国产一区二区三区成人欧美日韩在线观看 | 97精品国产| 亚洲免费成人av在线| 人人精品亚洲| 久久99蜜桃| 日韩福利视频导航| 不卡视频在线| 另类专区亚洲| 欧美精品国产| 亚洲欧美视频一区二区三区| 国产精品麻豆久久| 国产日韩欧美一区二区三区 | 亚洲成人va| 久久av免费看| 亚洲久久视频| 亚洲激情不卡| 日韩成人综合| 精品一区二区三区四区五区| 日韩高清一级| 亚洲综合三区| av亚洲免费| 成人精品亚洲| 92国产精品| 国产福利91精品一区二区| 91精品视频一区二区|