我正在尝试以编程方式安装应用程序而无需用户交互,我收到此错误
SecurityException: Neither user 10057 nor current process has android.permission.INSTALL_PACKAGES
Run Code Online (Sandbox Code Playgroud)
我的安装程序位于root系统上的/ system/app中,选中"安装非市场应用程序",安装程序具有权限
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
Run Code Online (Sandbox Code Playgroud)
这是我的通话功能
private void puk(Context context) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
String fileName = PAKAGE_FILE_NAME ;
String dir_type = Environment.DIRECTORY_DOWNLOADS;
File dir= Environment.getExternalStoragePublicDirectory(dir_type);
java.io.File file = new java.io.File(dir ,fileName);
Uri packageUri = Uri.fromFile(file);
PackageManager pm = context.getPackageManager();
Class<? extends PackageManager> o = pm.getClass();
Method[] allMethods=o.getMethods();
for (Method m : allMethods) {
if (m.getName().equals("installPackage")) {
Log.e(TAG, "installing the app.." );
m.invoke(pm,new Object[] { packageUri, null, 1, "com.mic.zapp"});
break;
} …Run Code Online (Sandbox Code Playgroud) 我有一项服务,我想要服务推广,以启用它作为设备管理员,直到现在我从服务启动这种类型的UI交互,如
Intent intent2 = new Intent();
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent2.setAction(android.content.Intent.ACTION_VIEW);
intent2.setDataAndType(uri, "application/vnd.android.package-archive");
context.startActivity(intent2);
Run Code Online (Sandbox Code Playgroud)
它的工作原理,但使用DevicePolicyManager我找不到方法:
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "some text.");
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
不起作用:不要宣传任何东西,但也不要崩溃.没有intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);它只是崩溃,因为这段代码在服务内部.想法?
可以在运行时为一个类变量赋一个函数来执行吗?像C一样的"函数指针"
像这样的事情:(这不会起作用,因为总和超出A的范围,但这是我的意思)
class A {
public $function_name;
public functon run($arg1,$arg2){
$function_name($arg1,$arg2);
}
}
function sum($a,$b){
echo $a+$b;
}
$a=new A();
$a->function_name='sum';
$a->run();
Run Code Online (Sandbox Code Playgroud)
[编辑]我知道有"call_user_func",但我需要了解范围内的函数或使用公共类方法
我有一个SomeTaskManager抽象方法的类runATask.我想runATask通过反射执行方法,这是我的代码:我错过了什么?
SomeTaskManager pm= (SomeTaskManager)context.getSomeTaskManager();
Class c = Class.forName( pm.getClass().getName() );
Method[] allMethods = c.getDeclaredMethods();
for (Method m : allMethods) {
if (!m.getName().equals("runATask")) {
continue;
}
m.invoke( c ,new Object[] { someParam, null, 1});
break;
}
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误
java.lang.IllegalArgumentException: object is not an instance of the class
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at de.vogella.android.downloadmanager.DownloadManagerActivity.riflesso(DownloadManagerActivity.java:250)
at de.vogella.android.downloadmanager.DownloadManagerActivity.onCreate(DownloadManagerActivity.java:68)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
at android.app.ActivityThread.access$1500(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3835)
at java.lang.reflect.Method.invokeNative(Native Method)
at …Run Code Online (Sandbox Code Playgroud)