当前位置: 首页 > news >正文

郑州做网站价格公司没有网站如何做外贸

郑州做网站价格,公司没有网站如何做外贸,手机制作网页软件下载,响应式网页制作软件该文档就是在android12系统上提供一个广播接收器#xff0c;app端发送一个广播#xff0c;并且带入apk的地址就可以实现安装 1、广播注册 frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java 首先要导入的依赖 import android.app.P…该文档就是在android12系统上提供一个广播接收器app端发送一个广播并且带入apk的地址就可以实现安装 1、广播注册 frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java 首先要导入的依赖 import android.app.PendingIntent; import android.content.IntentSender; import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; // import android.os.RemoteException; import android.content.ComponentName; import android.util.Log; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInstaller; import android.util.Log; import static android.content.pm.PackageInstaller.SessionParams.UID_UNKNOWN; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; import android.content.pm.parsing.ApkLiteParseUtils; import android.content.pm.parsing.PackageLite; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; import android.os.IBinder; import android.os.RemoteException; import android.util.Log; import android.net.Uri; //import com.android.packageinstaller.InstallEventReceiver; import com.android.server.policy.TemporaryFileManager; import com.android.internal.content.PackageHelper; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Files; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.TimeUnit; import android.os.Environment;去定义一个变量 private final static SynchronousQueueIntent mInstallResults new SynchronousQueue(); 开始去定义那个广播安装的广播 filter.addAction(com.android.packageinstaller.ACTION_SILENCE_INSTALL); filter.addAction(android.intent.action.BOOT_COMPLETED); 然后就是收到安装的广播之后应该去干什么 BroadcastReceiver mDockReceiver new BroadcastReceiver() {Overridepublic void onReceive(Context context, Intent intent) {if (Intent.ACTION_DOCK_EVENT.equals(intent.getAction())) {mDefaultDisplayPolicy.setDockMode(intent.getIntExtra(Intent.EXTRA_DOCK_STATE,Intent.EXTRA_DOCK_STATE_UNDOCKED));}else if(com.android.packageinstaller.ACTION_SILENCE_INSTALL.equals(intent.getAction())){android.util.Log.e(yanf yim,enter install_app------);Intent mIntent1 new Intent();mIntent1.setAction(com.android.install_app1);mIntent1.setComponent(new ComponentName(com.android.settings,com.android.settings.SDMountInstallReceiver));String apkFilePath intent.getStringExtra(apkFilePath);mIntent1.putExtra(path_name,apkFilePath);context.sendBroadcast(mIntent1);} 在这里就是去启动了Settings下的SDMountInstallReceiver 2、启动设置下的SDMountInstallReceiver 2.1 先去注册 代码路径 packages\apps\Settings\AndroidManifest.xml receiver android:name.SDMountInstallReceiverandroid:exportedtrueintent-filter android:priority1000 action android:namecom.android.install_app1/ action android:namecom.android.install_app2/ action android:namecom.android.install_app3//intent-filter /receiver !--add end--2.2 安装的服务 packages\apps\Settings\src\com\android\settings\SDMountInstallReceiver.java /*****接收广播静默安装apk*/ package com.android.settings;import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import java.io.File; import android.os.Build; import java.io.IOException; import android.content.ContentValues; import android.content.IntentFilter; import android.util.Log; import android.content.pm.PackageManager; import android.os.storage.StorageManager; import android.os.Environment; import android.os.Bundle; import android.os.SystemProperties; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.app.PendingIntent; import android.content.IntentSender; import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; // import android.os.RemoteException; import android.util.Log; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream;import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; import android.content.pm.VersionedPackage; import android.net.Uri; import android.os.Binder; import android.os.Build; import android.util.Log;import androidx.core.content.FileProvider;import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream;public class SDMountInstallReceiver extends BroadcastReceiver {private static final String TAGInstall SDMountInstallReceiver;private static final String PROP_SD_EXTERNAL_PATH vold.path.external_sd;private String apksPath ;private Bundle bundleSimple;private PackageManager mPackageManager;Overridepublic void onReceive(final Context context, Intent intent) {if (com.android.install_app1.equals(intent.getAction())) {String pathName intent.getStringExtra(path_name);android.util.Log.e(xnq, enter SDMountInstallReceiver------1);installApk(context, pathName);android.util.Log.e(xnq, enter SDMountInstallReceiver------2);}}/*** 显示安装** param context* param filePath*/public static synchronized void install(Context context, String filePath) {File apkFile new File(filePath);Log.e(TAG, apkPath apkFile.getAbsolutePath());if (!apkFile.exists()) {Log.e(TAG, apk 不存在);return;}Intent installApkIntent new Intent();installApkIntent.setAction(Intent.ACTION_VIEW);installApkIntent.addCategory(Intent.CATEGORY_DEFAULT);installApkIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//这里只适配了8.0需要有权限if (Build.VERSION.SDK_INT Build.VERSION_CODES.O) {boolean hasInstallPermission context.getPackageManager().canRequestPackageInstalls();if (hasInstallPermission) {//通过FileProvider赋予apk访问权限Uri uri FileProvider.getUriForFile(context, context.getPackageName() .fileprovider, apkFile);installApkIntent.setDataAndType(uri, application/vnd.android.package-archive);installApkIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);if (context.getPackageManager().queryIntentActivities(installApkIntent, 0).size() 0) {context.startActivity(installApkIntent);}}}}/*** 卸载apk** param context* param packageName*/public static synchronized void uninstallPackage(Context context, String packageName) {if (!isSystemSign(context)) {Log.e(TAG, apk不具备系统签名无法使用静默安装功能);uninstall(context, packageName);return;}Intent intent new Intent(context, SDMountInstallReceiver.class);intent.setAction(PackageInstaller.EXTRA_STATUS);//创建卸载广播意图PendingIntent pendingIntent PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);//获取安装程序PackageInstaller installer context.getPackageManager().getPackageInstaller();//执行卸载操作if (Build.VERSION.SDK_INT Build.VERSION_CODES.O) {//卸载最高版本apkinstaller.uninstall(new VersionedPackage(packageName, PackageManager.VERSION_CODE_HIGHEST), pendingIntent.getIntentSender());} else {//卸载apkinstaller.uninstall(packageName, pendingIntent.getIntentSender());}}/*** 显式卸载** param context* param packageName*/public static synchronized void uninstall(Context context, String packageName) {//获取删除包名的URIUri uri Uri.parse(package: packageName);Intent intent new Intent();//设置我们要执行的卸载动作intent.setAction(Intent.ACTION_DELETE);//设置获取到的URIintent.setData(uri);context.startActivity(intent);}/*** 安装apk* param context* param filePath*/public static synchronized void installApk (Context context, String filePath){if (!isSystemSign(context)) {Log.e(TAG, apk不具备系统签名无法使用静默安装功能);//install(context, filePath);return;}File apkFile new File(filePath);Log.e(TAG, apkPath apkFile.getAbsolutePath());if (!apkFile.exists()) {Log.e(TAG, apk 不存在);return;}//1. 获取包安装程序PackageInstaller packageInstaller context.getPackageManager().getPackageInstaller();//2. 安装参数PackageInstaller.SessionParams sessionParams new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL);//设置大小sessionParams.setSize(apkFile.length());//3. 会话idint sessionId createSession(packageInstaller, sessionParams);Log.e(TAG, sessionId sessionId);if (sessionId ! -1) {//4. 将数据拷贝进sessionboolean copySuccess copyInstallFile(packageInstaller, sessionId, filePath);Log.e(TAG, copySuccess copySuccess);if (copySuccess) {//5. 执行安装execInstallCommand(context, packageInstaller, sessionId);}}}/*** 创建sessionId** param packageInstaller* param sessionParams* return*/private static int createSession (PackageInstallerpackageInstaller, PackageInstaller.SessionParams sessionParams){int sessionId -1;try {//根据sessionParams创建sessionIdsessionId packageInstaller.createSession(sessionParams);} catch (IOException e) {e.printStackTrace();}return sessionId;}/*** 拷贝apk文件写入PackageInstaller.Session** param packageInstaller* param sessionId* param apkFilePath* return*/private static boolean copyInstallFile (PackageInstaller packageInstaller,int sessionId, String apkFilePath){InputStream in null;OutputStream out null;PackageInstaller.Session session null;boolean success false;try {File apkFile new File(apkFilePath);//通过sessionId获取PackageInstaller.Sessionsession packageInstaller.openSession(sessionId);//打开输入流out session.openWrite(base.apk, 0, apkFile.length());//创建文件流in new FileInputStream(apkFile);int total 0, c;byte[] buffer new byte[1024 * 1024];//读取文件流while ((c in.read(buffer)) ! -1) {total c;out.write(buffer, 0, c);}//同步数据session.fsync(out);Log.i(TAG, streamed total bytes);success true;} catch (IOException e) {e.printStackTrace();} finally {try {if (out ! null) {out.close();}if (in ! null) {in.close();}} catch (IOException e) {e.printStackTrace();}if (session ! null) {session.close();}}return success;}/*** 执行安装** param context* param packageInstaller* param sessionId* return*/private static void execInstallCommand (Context context, PackageInstaller packageInstaller,int sessionId){PackageInstaller.Session session null;try {//通过sessionId获取PackageInstaller.Sessionsession packageInstaller.openSession(sessionId);//创建一个广播意图Intent intent new Intent(context, SDMountInstallReceiver.class);intent.setAction(PackageInstaller.EXTRA_STATUS);//设置广播接受者PendingIntent pendingIntent PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);//执行安装命令安装完成将发送广播通知session.commit(pendingIntent.getIntentSender());} catch (Exception e) {e.printStackTrace();} finally {if (session ! null) {session.close();}}}/*** 根据包名判断app是否具有系统签名*/private static boolean isSystemSign (Context context){return context.getPackageManager().checkSignatures(Binder.getCallingUid(), android.os.Process.SYSTEM_UID) PackageManager.SIGNATURE_MATCH;}}
http://www.dnsts.com.cn/news/61495.html

相关文章:

  • 电子商务网站建设实践报告wordpress页面和文章
  • 网站头部怎么做瑞安做网站建设哪家好
  • 手机购物网站模板网站字体 font-family
  • 网页和网站做哪个好用吗网站运营推广怎做
  • 没有公司怎么做网站wordpress 自定义文章排序
  • 网页建站网站导航网源码
  • 深圳网站推广公司建立网站一般要多少钱
  • 手机网站微信登录接口用c语言做公司网站
  • 深圳网站建设哪个公司好网站建设模板源码特效
  • 焊枪公司网站怎么做品牌网上做推广
  • 混沌鸿蒙网站建设温州集团网站建设公司
  • 触屏网站模板免费站推广网站2022
  • 开网站怎么开网站流量钱是谁给的
  • 做网站和做微商城有什么区别查询网站怎么做的
  • 网站片头怎么做企业官方网站是什么
  • 个人阿里云账号可以做网站备案电子商务网站运营
  • 建国外网站需要多少钱怎么打开手机app
  • 建筑专业网站泰安那家网好
  • mvc6 网站开发实战推广过程
  • 网站开发到上线的流程福田做商城网站建设哪家公司便宜点
  • 马家堡网站建设大型h5手游平台
  • 中国新农村建设促进会网站顺德网站建设收费标准
  • 贵州省安顺市网站建设网站访客
  • 微信 网站 织梦自己做网站做外贸可以吗
  • 山东食品行业网站模板百度广告联盟电话
  • 延庆网站建设天津专业网站制作设计
  • 哪个网站做图找图片网站做视频在线观看网址
  • 网址收录网站可信赖的购物网站建设
  • 西安网站建设缑阳建但是网站相关内容和程序并没有建设完_其次网站公司给我公司的
  • 怎么做网站前台龙岗微信网站制作