大家好,我正在修改2.2平台下Settings里的源码,碰到了点问题,望大家帮忙,问题是这样的在AndroidMenifest.xml中我们可以看到android:sharedUserId="android.uid.system"
但是有了这句后,我就无法对sd卡进行读写操作,比如我丢个test.txt到sd卡下在进行IO操作,是找不到这个文件的
如果我把android:sharedUserId="android.uid.system"注释掉,就可以对test.txt进行IO操作了,也找的到这个文件。
在Settings中android:sharedUserId="android.uid.system"是不可少的,少了它很多Settings下应用直接开不了,或一开就报错。
问下大家,有什么方法在有android:sharedUserId="android.uid.system"的情况下,还能对sd卡进行读写操作吗??
但是有了这句后,我就无法对sd卡进行读写操作,比如我丢个test.txt到sd卡下在进行IO操作,是找不到这个文件的
如果我把android:sharedUserId="android.uid.system"注释掉,就可以对test.txt进行IO操作了,也找的到这个文件。
在Settings中android:sharedUserId="android.uid.system"是不可少的,少了它很多Settings下应用直接开不了,或一开就报错。
问下大家,有什么方法在有android:sharedUserId="android.uid.system"的情况下,还能对sd卡进行读写操作吗??
我在eoe里面悬赏100金币了,希望有高人出现啊
setting 里面的不都是在setting那个app里
比如通话设置是在phone里面
自己写一个程序 放在setting里面显示 但是这个应用没有声明sharedUserId仅供参考,没有实际尝试过~-~
我最后的解决方式,在程序外部单独写了一个service,对这个service进行android:sharedUserId="android.uid.system"签名, 应用程序所需的数据都由service获得,然后向外广播,这个方法的确是不太好,希望有更好的办法
不行,我也应用也得有系统权限才行,不然我有些功能实现不了,所以我也必须要有system的sharedUserId
...
package="edu.tsinghua.onekeyalarm.autoupdate"
android:sharedUserId="android.uid.system"这样意味着你的全部进程都会以system身份在运行。这导致全部的进行都无法对sd卡进行写操作(但是可以读,你可以试试)所以,合理的方式是只指派一个进程以system身份运行,你把需要该权限的操作都用这个进程来完成就行了。比如我让一个Service以system身份运行,让他去给我安装app,那你需要这样定义这个Service:<service android:name="PackageInstallService"
android:sharedUserId="android.uid.system">
</service>不要把android:sharedUserId="android.uid.system"写在整个manifest中。这样,其他的进程,无论是Activity还是Service,都可以不受system权限的影响,可以去写sd卡了。
把完整的AndroidManifest.xml贴上来吧:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="edu.tsinghua.autoupdate"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".AutoUpdate"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> <service android:name="UpdateService" ></service>
<service android:name="PackageInstallService"
android:sharedUserId="android.uid.system">
</service>
</application>
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.INSTALL_PACKAGES"></uses-permission>
</manifest>
非常感谢,可能是我没说清楚,你的方法是剥离,是肯定可以的。
但是我想要的是我的应用既是android.uid.system级的,又可以读写sd卡,因为我自身的应用中有些方面也要用到android.uid.system才能用的权限。现在我解决了 我修改了 Volumn.cpp里面关于SD卡的一些东西.
9楼mentats,你在manifest里把system权限加给了service,可是这个service的貌似并没有拿到system权限。
我如果加到全局的话,只需要再用signapk.jar给这个apk重新弄个签名就好,如果只加给service的话,有什么额外操作吗?谢谢
用了九楼的方法,可是service并没有拿到system权限,是否还有其他的操作?