【发布时间】:2023-03-24 03:44:01
【问题描述】:
我正在尝试显示一个 android 应用程序的每日视图。我决定使用库ExtendedCalendarView,但我无法让它运行。
我在做什么?
首先,我从 github 下载了库并导入到我的工作区。然后,我将 de 库导入到我的项目中。它似乎很好地导入(带有绿色勾号)。
在我的 MainActivity.java 中我什么也没做:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
在我的设计 XML 文件中,我有显示 xml 的代码。 (和github里的一样):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.tyczj.extendedcalendarview.ExtendedCalendarView
android:id="@+id/calendar"
android:layout_height="match_parent"
android:layout_width="match_parent"/>
</RelativeLayout>
最后,在 AndroidManifest.xml 中,我将 ContentProvider 声明到标签中:
<provider
android:name="com.tyczj.extendedcalendarview.CalendarProvider"
android:authorities="com.tyczj.extendedcalendarview.cAlEndarprovider" />
发生了什么?
编译错误时,APP崩溃,日志中出现此错误信息:
致命异常:AsyncTask #1 java.lang.RuntimeException:在 java.util.concurrent.FutureTask$Sync 的 android.os.AsyncTask$3.done(AsyncTask.java:299) 处执行 doInBackground() 时发生错误。 innerSetException(FutureTask.java:273) at java.util.concurrent.FutureTask.setException(FutureTask.java:124) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) at java.util.concurrent .FutureTask.run(FutureTask.java:137) 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 在 java.util .concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 在 java.lang.Thread.run(Thread.java:856)
原因:java.lang.SecurityException: Permission Denial: 从 ProcessRecord{42dc32a8 8394:com.jcasadella.testcalendar/u0a145} (pid=8394, uid=10145) 打开提供程序 com.tyczj.extendedcalendarview.CalendarProvider 需要签名或在 android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2561) 在 android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2561) 在 android.os.Parcel.readException(Parcel.java:1379) 在 android.os.Parcel.readException(Parcel.java:1425) 签名.ActivityThread.acquireProvider(ActivityThread.java:4347) 在 android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1129) 在 android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:1836) 在 android.content.ContentResolver。 com.tyczj.extendedcalendarview.Day 的 android.content.ContentResolver.query(ContentResolver.java:336) 的查询(ContentResolver.java:378)$GetEvents.doInBackground(Day.java:122) com.tyczj.extendedcalendarview.Day $GetEvents.doInBackgro und(Day.java:1) at android.os.AsyncTask$2.call(AsyncTask.java:287) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
我的研究是什么?
我搜索了很多页面 (stackoverflow) 和其他页面,但找不到任何人出现此错误。
这似乎是我忘记了一些许可。目前我从未使用过 ContentProvider,也许问题就在这里......
我在 android 开发者官方页面中阅读了documentation,现在我对为什么该库使用 ContentProvider 感到有点困惑。
我还访问了 github 中的问题页面以搜索一些解决方案,但运气不好。
问题
我的问题是:
1) 不使用 ContentProvider 可以使用这个库吗?将事件保存在 sqlite 或内存中...如果可以,请指出正确的方向。
2) 我之前写的错误是什么原因?有人可以指出一个可能的解决方案吗?
新闻(2014 年 12 月 6 日)
我在其他设备上测试了相同的应用程序,它可以工作!我不知道发生了什么:
三星 Galaxy S3 (Android 4.3) -> 完美运行
Samsung Tab 3 (tablet Android 4.1) -> 权限拒绝错误。
这个APP需要在安卓4.1到4.3之间的平板tab3上运行。 现在,我将在库 github 页面中打开并发布。如果我有更多结果,我会在此处以答案格式发布。
提前致谢!感谢您每天在 stackoverflow 中的辛勤工作。
(对不起我的英语)
【问题讨论】:
-
android:authorities="com.tyczj.extendedcalendarview.cAlEndarprovider - 有错字吗?
-
输入错误?可能是处理区分大小写的操作系统版本之一
标签: android eclipse permissions calendar android-library