Android 读写用户字典权限拒绝
从UserDictionary.Words.CONTENT_URI表中的用户输入中搜索单词的简单应用程序。我正在使用BlueStacks模拟器。 错误日志表明在我的AndroidManifest中没有声明android.permission.READ\u USER\u字典或android.permission.WRITE\u USER\u字典。但我已宣布:Android 读写用户字典权限拒绝,android,android-permissions,android-contentresolver,Android,Android Permissions,Android Contentresolver,从UserDictionary.Words.CONTENT_URI表中的用户输入中搜索单词的简单应用程序。我正在使用BlueStacks模拟器。 错误日志表明在我的AndroidManifest中没有声明android.permission.READ\u USER\u字典或android.permission.WRITE\u USER\u字典。但我已宣布: <uses-permission android:name="ANDROID.PERMISSION.READ_USER_DICTION
<uses-permission android:name="ANDROID.PERMISSION.READ_USER_DICTIONARY"/>
<uses-permission android:name="ANDROID.PERMISSION.WRITE_USER_DICTIONARY"/>
AndroidManifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.contentresolver2"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="19"/>
<uses-permission android:name="ANDROID.PERMISSION.READ_USER_DICTIONARY"/>
<uses-permission android:name="ANDROID.PERMISSION.WRITE_USER_DICTIONARY"/>
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
<activity android:name="MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.java:
package com.example.contentresolver2;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.UserDictionary;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements View.OnClickListener {
private Cursor mCursor;
private static final String LOG_TAG = "LOG_TAG";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
(findViewById(R.id.btnSearch)).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnSearch:
performSearch();
break;
}
}
/**
* Read the word from the input and search in Android UserDictionary.Words table
*/
private void performSearch() {
// Select columns for projection
String[] projection = {
UserDictionary.Words._ID,
UserDictionary.Words.WORD,
UserDictionary.Words.LOCALE
};
String selectionClause = null;
String[] selectionArgs = {""}; // only one element array
String sortOrder = null;
// Read user input
String userInput = ((EditText) (findViewById(R.id.etSearchString))).getText().toString();
// Decide what kind of request to perform
if (TextUtils.isEmpty(userInput)) {
// Setting the selection clause to null will return all words
selectionClause = null;
selectionArgs[0] = "";
} else {
// Or setting the selection clause to find the word from the input
selectionClause = UserDictionary.Words.WORD + "= ?";
selectionArgs[0] = userInput;
}
// Perform query
mCursor = getContentResolver().query(
UserDictionary.Words.CONTENT_URI,
projection,
selectionClause,
selectionArgs,
sortOrder
);
// Some providers return null if an error occurs, others throw an exception
if (null == mCursor) {
Log.e(LOG_TAG, "MainActivity > performSearch(): mCursor is null");
// If the Cursor is empty, the provider found no matches
} else if (mCursor.getCount() < 1) {
Log.e(LOG_TAG, "MainActivity > performSearch(): mCursor mCursor is empty");
// Results:
} else {
mCursor.moveToFirst();
String resultString = mCursor.getString(mCursor.getColumnIndex(UserDictionary.Words.WORD));
((TextView) (findViewById(R.id.tvResultString))).setText(resultString);
}
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:textSize="20sp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Search in UserDictionary"
/>
<EditText
android:hint="Input a word to search in UserDictionary"
android:id="@+id/etSearchString"
android:layout_width="350dp"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btnSearch"
android:text="Search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tvResultString"
android:text="___"
android:textSize="20sp"
android:textColor="#FFFF00"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
/>
</LinearLayout>
下面是答案:看起来权限是区分大小写的。谢谢你,你让我开心了!
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:textSize="20sp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Search in UserDictionary"
/>
<EditText
android:hint="Input a word to search in UserDictionary"
android:id="@+id/etSearchString"
android:layout_width="350dp"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btnSearch"
android:text="Search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tvResultString"
android:text="___"
android:textSize="20sp"
android:textColor="#FFFF00"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
/>
</LinearLayout>